CorpSms/DLG_SendMms.cpp
2025-02-27 16:58:16 +08:00

4449 lines
118 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// DLG_SendMms.cpp : implementation file
//
#include "stdafx.h"
#include "corpsms.h"
#include "DLG_SendMms.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DLG_SendMms dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "FFaxDF.h"
#include "DLG_Send_User.h"
#include "DLG_Send_Inport.h"
#include "DLG_FiltWarning.h"
#include "DLG_AddWarning.h"
#include "DLG_User_InportP2.h"
#include "DLG_AddBack.h"
#include "DLG_SendMms_Input.h"
#ifdef UNICODE
class CAdoMmsItem:public CADORecordBinding
{
BEGIN_ADO_BINDING(CAdoMmsItem)
ADO_VARIABLE_LENGTH_ENTRY2(1,adInteger, m_ItemID ,sizeof(m_ItemID), l_ItemIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(2,adInteger, m_BoxID ,sizeof(m_BoxID), l_BoxIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(3,adVarWChar,m_GroupID ,sizeof(m_GroupID) , l_GroupIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(4,adVarWChar,m_Name ,sizeof(m_Name) , l_NameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(5,adVarWChar, m_MmsNum ,sizeof(m_MmsNum) , l_MmsNumStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(6,adVarWChar, m_Status ,sizeof(m_Status) , l_StatusStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(7,adInteger, m_SendID ,sizeof(m_SendID), l_SendIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(8,adVarWChar, m_NickName ,sizeof(m_NickName), l_NickNameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(9,adVarWChar, m_BZ ,sizeof(m_BZ), l_BZStatus,false)
END_ADO_BINDING()
public:
long m_ItemID;
ULONG l_ItemIDStatus;
long m_BoxID;
ULONG l_BoxIDStatus;
TCHAR m_GroupID[24];
ULONG l_GroupIDStatus;
TCHAR m_Name[24];
ULONG l_NameStatus;
TCHAR m_MmsNum[24];
ULONG l_MmsNumStatus;
TCHAR m_Status[4];
ULONG l_StatusStatus;
long m_SendID;
ULONG l_SendIDStatus;
TCHAR m_NickName[24];
ULONG l_NickNameStatus;
TCHAR m_BZ[64];
ULONG l_BZStatus;
CAdoMmsItem()
{
m_ItemID = 0;
m_BoxID = 0;
memset(m_GroupID,0,sizeof(m_GroupID));
memset(m_Name,0,sizeof(m_Name));
memset(m_MmsNum,0,sizeof(m_MmsNum));
memset(m_Status,0,sizeof(m_Status));
memset(m_NickName,0,sizeof(m_NickName));
memset(m_BZ,0,sizeof(m_BZ));
m_SendID = 0;
}
};
#else
class CAdoMmsItem:public CADORecordBinding
{
BEGIN_ADO_BINDING(CAdoMmsItem)
ADO_VARIABLE_LENGTH_ENTRY2(1,adInteger, m_ItemID ,sizeof(m_ItemID), l_ItemIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(2,adInteger, m_BoxID ,sizeof(m_BoxID), l_BoxIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(3,adVarChar,m_GroupID ,sizeof(m_GroupID) , l_GroupIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(4,adVarChar,m_Name ,sizeof(m_Name) , l_NameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(5,adVarChar, m_MmsNum ,sizeof(m_MmsNum) , l_MmsNumStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(6,adVarChar, m_Status ,sizeof(m_Status) , l_StatusStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(7,adInteger, m_SendID ,sizeof(m_SendID), l_SendIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(8,adVarChar, m_NickName ,sizeof(m_NickName), l_NickNameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(9,adVarChar, m_BZ ,sizeof(m_BZ), l_BZStatus,false)
END_ADO_BINDING()
public:
long m_ItemID;
ULONG l_ItemIDStatus;
long m_BoxID;
ULONG l_BoxIDStatus;
char m_GroupID[24];
ULONG l_GroupIDStatus;
char m_Name[24];
ULONG l_NameStatus;
char m_MmsNum[24];
ULONG l_MmsNumStatus;
char m_Status[4];
ULONG l_StatusStatus;
long m_SendID;
ULONG l_SendIDStatus;
TCHAR m_NickName[24];
ULONG l_NickNameStatus;
TCHAR m_BZ[64];
ULONG l_BZStatus;
CAdoMmsItem()
{
m_ItemID = 0;
m_BoxID = 0;
memset(m_GroupID,0,sizeof(m_GroupID));
memset(m_Name,0,sizeof(m_Name));
memset(m_MmsNum,0,sizeof(m_MmsNum));
memset(m_Status,0,sizeof(m_Status));
memset(m_NickName,0,sizeof(m_NickName));
memset(m_BZ,0,sizeof(m_BZ));
m_SendID = 0;
}
};
#endif
DLG_SendMms::DLG_SendMms(CWnd* pParent /*=NULL*/)
: CDialog(DLG_SendMms::IDD, pParent)
{
//{{AFX_DATA_INIT(DLG_SendMms)
//}}AFX_DATA_INIT
m_bInit = false;
m_pMainFrame = NULL;
memset( &m_OldRect , 0 , sizeof(m_OldRect) );
m_bModify = false;
m_bAttachModify = false;
m_lBoxID = 0;
m_lBoxType = 0;
m_lMmsUpID = 0;
m_bSend = false;
m_lSendIndex = 0;
m_bShowReMobile = true;
m_lReMobileType = 0;
m_bBackReMobile = true;
m_lBackReMobileType = 0;
m_bSendSR = false;
m_dwSendStartTime = 0;
m_dwBackCount=0; //黑名单数量
m_dwNoSupCount=0; //不支持号码数量
m_dwNoMsgCount=0; //没内容数量
m_bSaveList = false;
m_lPage = 0;
m_lCurSendType = 0;
//彩信
m_pFilterGraph = NULL;
m_bMidiPlay = false;
m_bMmsPlay = false;
m_MMS_File = NULL;
m_MMS_FileSize = 0;
m_MMS_FileUpLen = 0;
memset(&m_MMS_Head , 0 , sizeof(m_MMS_Head));
memset(&m_MMS_Z , 0 , sizeof(m_MMS_Z));
m_MMS_CurZ = 0;
Mms_New();
m_bCtrlEnable = true; //默认控制是可编辑的
}
void DLG_SendMms::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DLG_SendMms)
DDX_Control(pDX, IDC_SEND_MMS_ID, m_MMS_ID);
DDX_Control(pDX, IDC_SEND_MMS_MIDI_TIME, m_S_Midi_Time);
DDX_Control(pDX, IDC_SEND_MMS_MIDI_PLAY, m_B_Midi_Play);
DDX_Control(pDX, IDC_SEND_MMS_MIDI_SLIDER, m_S_Midi_Slider);
DDX_Control(pDX, IDC_SEND_MMS_FORWARD, m_B_Forward);
DDX_Control(pDX, IDC_SEND_MMS_NEXT, m_B_Next);
DDX_Control(pDX, IDC_SEND_MMS_PLAY, m_B_Play);
DDX_Control(pDX, IDC_SEND_MMS_ZP, m_Mms_ZP);
DDX_Control(pDX, IDC_SEND_MMS_ZS, m_Mms_ZS);
DDX_Control(pDX, IDC_SEND_MMS_Z, m_Mms_Z);
DDX_Control(pDX, IDC_SEND_MMS_TXT, m_Mms_Txt);
DDX_Control(pDX, IDC_SEND_MMS_MIDI, m_Mms_Midi);
DDX_Control(pDX, IDC_SEND_MMS_DELAY, m_Mms_Delay);
DDX_Control(pDX, IDC_SEND_MMS_BMP, m_Mms_Bmp);
DDX_Control(pDX, IDC_SEND_FAX_TITLE, m_E_Title);
DDX_Control(pDX, IDC_SENDFAX_SAVESENDLOG, m_B_SaveSendLog);
DDX_Control(pDX, IDC_SENDFAX_START, m_B_Start);
DDX_Control(pDX, IDC_SENDFAX_SAVE, m_B_Save);
DDX_Control(pDX, IDC_SENDFAX_SAVEAS, m_B_SaveAs);
DDX_Control(pDX, IDC_SENDFAX_OPEN, m_B_Open);
DDX_Control(pDX, IDC_SENDFAX_TEMPLATE, m_B_Template);
DDX_Control(pDX, IDC_SENDFAX_SC, m_B_SC);
DDX_Control(pDX, IDC_SENDFAX_S1, m_S_S1);
DDX_Control(pDX, IDC_SENDFAX_REMOBILE, m_B_ReMobile);
DDX_Control(pDX, IDC_SENDFAX_NUMADD, m_B_Add);
DDX_Control(pDX, IDC_SENDFAX_NUM, m_E_Num);
DDX_Control(pDX, IDC_SENDFAX_NULL, m_B_Null);
DDX_Control(pDX, IDC_SENDFAX_NEW2, m_B_New2);
DDX_Control(pDX, IDC_SENDFAX_NEW, m_B_New);
DDX_Control(pDX, IDC_SENDFAX_MSG_LIST, m_S_MsgList);
DDX_Control(pDX, IDC_SENDFAX_LIST_COUNT, m_S_ListCount);
DDX_Control(pDX, IDC_SENDFAX_LIST, m_wndList);
DDX_Control(pDX, IDC_SENDMMS_DS_T, m_D_Time);
DDX_Control(pDX, IDC_SENDMMS_DS_D, m_D_Date);
DDX_Control(pDX, IDC_SENDFAX_DS, m_B_DS);
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_SENDMMS_TASK, m_B_Task);
}
BEGIN_MESSAGE_MAP(DLG_SendMms, CDialog)
//{{AFX_MSG_MAP(DLG_SendMms)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_TIMER()
ON_WM_CLOSE()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_SENDFAX_NUMADD, OnSendfaxNumadd)
ON_BN_CLICKED(IDC_SENDFAX_DS, OnSendfaxDs)
ON_BN_CLICKED(IDC_SENDFAX_NEW2, OnSendfaxNew2)
ON_BN_CLICKED(IDC_SENDFAX_NEW, OnSendfaxNew)
ON_BN_CLICKED(IDC_SENDFAX_SAVE, OnSendfaxSave)
ON_NOTIFY(NM_DBLCLK, IDC_SENDFAX_LIST, OnDblclkSendfaxList)
ON_NOTIFY(NM_RCLICK, IDC_SENDFAX_LIST, OnRclickSendfaxList)
ON_NOTIFY(LVN_KEYDOWN, IDC_SENDFAX_LIST, OnKeydownSendfaxList)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SENDFAX_DS_D, OnDatetimechangeSendfaxDsD)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SENDFAX_DS_T, OnDatetimechangeSendfaxDsT)
ON_EN_CHANGE(IDC_SEND_FAX_TITLE, OnChangeSendFaxTitle)
ON_BN_CLICKED(IDC_SENDFAX_START, OnSendfaxStart)
ON_BN_CLICKED(IDC_SEND_MMS_ZP, OnSendMmsZp)
ON_BN_CLICKED(IDC_SEND_MMS_MIDI, OnSendMmsMidi)
ON_BN_CLICKED(IDC_SEND_MMS_TXT, OnSendMmsTxt)
ON_CBN_EDITCHANGE(IDC_SEND_MMS_DELAY, OnEditchangeSendMmsDelay)
ON_CBN_SELCHANGE(IDC_SEND_MMS_DELAY, OnSelchangeSendMmsDelay)
ON_CBN_SELCHANGE(IDC_SEND_MMS_Z, OnSelchangeSendMmsZ)
ON_BN_CLICKED(IDC_SEND_MMS_PLAY, OnSendMmsPlay)
ON_BN_CLICKED(IDC_SEND_MMS_MIDI_PLAY, OnSendMmsMidiPlay)
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_SEND_MMS_NEXT, OnSendMmsNext)
ON_BN_CLICKED(IDC_SEND_MMS_FORWARD, OnSendMmsForward)
ON_BN_CLICKED(IDC_SEND_MMS_Z_ADD, OnSendMmsZAdd)
ON_BN_CLICKED(IDC_SEND_MMS_Z_DEL, OnSendMmsZDel)
ON_BN_CLICKED(IDC_SEND_MMS_Z_CLEAR, OnSendMmsZClear)
//}}AFX_MSG_MAP
ON_MESSAGE(DROPM_DROP,OnDrop)
ON_COMMAND( SEND_FAX_USER_ADD , On_User_Add )
ON_COMMAND( SEND_FAX_USER_MODIFY , On_User_Modify )
ON_COMMAND( SEND_FAX_USER_DEL , On_User_Del )
ON_COMMAND( SEND_FAX_USER_CLEAR , On_User_Clear )
ON_COMMAND( SEND_FAX_USER_INPORT , On_User_Inport )
ON_COMMAND( SEND_FAX_USER_EXPORT , On_User_Export )
ON_COMMAND( SEND_FAX_USER_STATUS , On_User_Status )
ON_COMMAND( MENU_MMS_Z_ADDBEGIN , On_Mms_Z_AddBegin )
ON_COMMAND( MENU_MMS_Z_ADDEND , On_Mms_Z_AddEnd )
ON_COMMAND( MENU_MMS_Z_ADDCEND , On_Mms_Z_AddCEnd )
ON_COMMAND( MENU_MMS_Z_ADDCBEGIN , On_Mms_Z_AddCBegin )
ON_COMMAND( MENU_MMS_Z_DEL , On_Mms_Z_Del )
ON_COMMAND( MENU_MMS_BMP_INS , On_Mms_Bmp_Ins )
ON_COMMAND( MENU_MMS_BMP_REP , On_Mms_Bmp_Rep )
ON_COMMAND( MENU_MMS_BMP_DEL , On_Mms_Bmp_Del )
ON_COMMAND( MENU_MMS_MIDI_INS , On_Mms_Midi_Ins )
ON_COMMAND( MENU_MMS_MIDI_REP , On_Mms_Midi_Rep )
ON_COMMAND( MENU_MMS_MIDI_DEL , On_Mms_Midi_Del )
ON_COMMAND( MENU_MMS_PASTE ,OnSendfaxNumPaste)
ON_MESSAGE(WM_GRAPHNOTIFY, OnGraphNotify)
ON_BN_CLICKED(IDC_SENDMMS_TASK, &DLG_SendMms::OnBnClickedSendmmsTask)
ON_BN_CLICKED(IDC_SENDFAX_SAVEAS, &DLG_SendMms::OnBnClickedSendfaxSaveas)
ON_BN_CLICKED(IDC_SENDFAX_OPEN, &DLG_SendMms::OnBnClickedSendfaxOpen)
ON_STN_CLICKED(IDC_SEND_MMS_BMP, &DLG_SendMms::OnStnClickedSendMmsBmp)
ON_STN_CLICKED(IDC_SEND_MMS_TXT, &DLG_SendMms::OnStnClickedSendMmsTxt)
ON_BN_CLICKED(IDC_SENDFAX_REMOBILE, &DLG_SendMms::OnClickedSendfaxRemobile)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLG_SendMms message handlers
int DLG_SendMms::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
m_UserDrop.Register(this);
return 0;
}
BOOL DLG_SendMms::OnInitDialog()
{
CDialog::OnInitDialog();
this->SetIcon( AfxGetApp()->LoadIcon(IDI_L_SMSDF),false);
m_D_Date.EnableWindow(false);
m_D_Time.EnableWindow(false);
m_B_ReMobile.SetCheck(true); //默认检测重复
m_B_SaveSendLog.SetCheck(true); //默认写到日志
InitItem();
m_E_Title.SetFocus();
if ( !m_pMainFrame->GetUserPurview( PURVIEW_SENDP , false ) )
{
m_E_Num.EnableWindow( false ); //没有发送私人电话本的权限
m_B_Add.EnableWindow( false );
}
if ( !m_pMainFrame->GetUserPurview( PURVIEW_PL , false ) )
{
m_B_Task.EnableWindow(false);
}
m_bModify = false;
//彩信
//将显示彩信的信息框放入手机图片内部
CRect rect;
GetDlgItem(IDC_SEND_MMS_BACK)->GetWindowRect(&rect);
rect.top+=28;
rect.bottom-=28;
rect.left+=1;
rect.right-=1;
this->ScreenToClient(&rect);
GetDlgItem(IDC_SENDMMS_HTML)->MoveWindow(rect);
m_Html.CreateFromStatic(IDC_SENDMMS_HTML, this);
m_Html.Navigate(_T("about:blank"),navNoHistory); //默认打开空白网页
m_Html.SetSilent(true); //不弹出各种窗口。
#define MMS_BUTTON_HEIGHT 26
#define MMS_BUTTON_WIDTH 26
CRect rect2;
rect2 = rect;
rect2.top = rect.bottom+2;
rect2.bottom = rect2.top + MMS_BUTTON_HEIGHT;
rect2.left = rect.left+rect.Width()/2-MMS_BUTTON_WIDTH/2;
rect2.right=rect2.left+MMS_BUTTON_WIDTH;
m_B_Play.MoveWindow(rect2);
CRect rect3=rect2;
rect3.left = rect2.left-MMS_BUTTON_WIDTH*2;
rect3.right= rect3.left + MMS_BUTTON_WIDTH;
m_B_Forward.MoveWindow(rect3);
rect3.left = rect2.right+MMS_BUTTON_WIDTH*1;
rect3.right= rect3.left + MMS_BUTTON_WIDTH;
m_B_Next.MoveWindow(rect3);
m_B_Forward.SetBitmaps(IDB_MMS_FORWARD, RGB(0,0,0));
m_B_Forward.DrawTransparent();
m_B_Forward.SetWindowText(_T(""));
m_B_Forward.SetTooltipText(_T("前一帧"));
//m_B_Play.SetBitmaps(IDB_MMS_PLAY, RGB(0,0,0), (int)BTNST_AUTO_DARKER);
m_B_Play.SetBitmaps(IDB_MMS_PLAY, RGB(0,0,0));
m_B_Play.DrawTransparent();
m_B_Play.SetWindowText(_T(""));
m_B_Play.SetTooltipText(_T("播放彩信"));
m_B_Next.SetBitmaps(IDB_MMS_NEXT, RGB(0,0,0));
m_B_Next.DrawTransparent();
m_B_Next.SetWindowText(_T(""));
m_B_Next.SetTooltipText(_T("后一帧"));
Mms_Showmm();
//设置控件
m_MMS_ID.SetTextColor( RGB(0,0,255) );
m_Mms_ZS.SetTextColor( RGB(255,0,0) );
m_Mms_Bmp.SetTextColor( RGB(0,0,255) );
//m_Mms_Bmp.SetLinkText( MOBSET_URL );
m_Mms_Bmp.SetLinkText( _T("none") );
m_Mms_Bmp.SetLink( true );
m_Mms_Bmp.SetLinkCursor( AfxGetApp()->LoadCursor( IDC_C_HAND ) );
//m_Mms_Bmp.SetFontSize(16);
m_Mms_Midi.SetTextColor( RGB(0,0,255) );
m_Mms_Midi.SetLink( true );
m_Mms_Midi.SetLinkText( _T("none") );
m_Mms_Midi.SetLinkCursor( AfxGetApp()->LoadCursor( IDC_C_HAND ) );
m_Mms_Txt.SetTextColor( RGB(0,0,255) );
m_Mms_Txt.SetLink( true );
m_Mms_Txt.SetLinkText( _T("none") );
m_Mms_Txt.SetLinkCursor( AfxGetApp()->LoadCursor( IDC_C_HAND ) );
//显示帧数
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
//播放Midi
m_S_Midi_Slider.SetRange(0, 100);
m_S_Midi_Slider.SetPos(0);
m_bInit = true;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DLG_SendMms::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( !m_bInit ) return;
CRect rect;
this->GetWindowRect(&rect);
if ( rect.Width()<200 || rect.Height() < 150 ) //当SIZE已很小时则不用再移动窗口
return;
CRect rect3;
CRect rUser;
//重置用户列表
m_wndList.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rect.right - 17;
rect3.bottom = rect.bottom -17;
this->ScreenToClient(&rect3);
m_wndList.MoveWindow(&rect3);
//重置计数表
m_S_ListCount.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rect.right - 17+7;
rect3.bottom = rect.bottom -17+7;
this->ScreenToClient(&rect3);
m_S_ListCount.MoveWindow(&rect3);
//重置信息静态控件
m_S_MsgList.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rUser.right;
rect3.bottom = rect.bottom -17+7;
this->ScreenToClient(&rect3);
m_S_MsgList.MoveWindow(&rect3);
/*
//重置信息栏
m_Html.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rUser.right;
rect3.bottom = rect.bottom -15;
this->ScreenToClient(&rect3);
m_Html.MoveWindow(&rect3);
*/
}
void DLG_SendMms::OnTimer(UINT nIDEvent)
{
CDialog::OnTimer(nIDEvent);
if ( nIDEvent == 1 )
{
KillTimer( 1 );
if ( m_bSend )
{
OnSendfaxStart();
if ( m_pMainFrame->m_Setup.bAutoReSend ) //如果设置了自动重发,则重新发送多一次
{
TCHAR szBuf[128]={0};
_stprintf( szBuf , _T("彩信发送列表 提交超时,准备重发!"));
this->SetWindowText( szBuf );
Sleep(2000);
OnSendfaxStart();
}
else
{
MessageBox( _T("提交彩信超时,请检查网络连接!") , _T("错误") , MB_ICONWARNING );
}
return ;
}
}
if ( nIDEvent == 10 )
{
KillTimer(nIDEvent);
SendNextMms();
return ;
}
if ( nIDEvent == 12 )
{
KillTimer(nIDEvent);
OnEditchangeSendMmsDelay();
return ;
}
if ( nIDEvent == 20 ) //播放Midi
{
if ( m_pFilterGraph )
{
double pos = 0, duration = 1.;
m_pFilterGraph->GetCurrentPosition(&pos);
m_pFilterGraph->GetDuration(&duration);
// Get the new position, and update the slider
int newPos = int(pos * 100 / duration);
if (m_S_Midi_Slider.GetPos() != newPos)
{
m_S_Midi_Slider.SetPos(newPos);
/*
long lPos =0;
long lDur = 0;
if ( pos>0 )
{
lPos = pos/1000.0;
}
if ( duration>0 )
{
lDur = duration/1000.0;
}
*/
long lPosMin = (long)(pos+0.5f)/60;
long lPosSec = (long)(pos+0.5f)%60;
long lDurMin = (long)(duration+0.5f)/60;
long lDurSec = (long)(duration+0.5f)%60;
CString str;
str.Format(_T("%d:%d %d:%d") , lPosMin,lPosSec,lDurMin,lDurSec);
m_S_Midi_Time.SetWindowText(str);
}
}
}
if ( nIDEvent == 21 ) //播放彩信
{
OnSendMmsNext();
}
}
void DLG_SendMms::OnClose()
{
if ( CloseList() )
{
CDialog::OnClose();
}
}
void DLG_SendMms::OnDestroy()
{
m_bInit = false;
CDialog::OnDestroy();
}
void DLG_SendMms::SetMainFrame(CMainFrame *pFrame)
{
m_pMainFrame = pFrame;
m_pSocket = &m_pMainFrame->m_Socket;
m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS2.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS3.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS4.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS4.SetCursorLocation(adUseClient);
m_AdoRS5.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS5.SetCursorLocation(adUseClient);
m_AdoRS6.SetAdoConnection( &m_pMainFrame->m_adoConnection );
}
void DLG_SendMms::InitItem()
{
if ( m_bInit ) return ;
m_bInit = true;
//限制最大可发送的数据长度
m_E_Title.LimitText( 60 );
//创建图像列表
m_Image.Create( 20 , 20 , ILC_COLOR32|ILC_MASK , 5 , 1);
CBitmap bmp;
bmp.LoadBitmap( IDB_L_USER_NOR );
m_Image.Add( &bmp , RGB(193,193,193) ); //设置
bmp.DeleteObject();
bmp.LoadBitmap( IDB_L_USER_EXP );
m_Image.Add( &bmp , RGB(193,193,193) ); //设置
//加入图像列表
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
m_wndList.SetBkColor( RGB(237,238,188) );
m_wndList.SetTextBkColor( RGB(237,238,188) );
//m_wndList.SubClassWindow2();
//m_wndList.SetHeadings(_T(" 姓 名,80; 昵 称,80;手机号码,100; 状 态,70; 用户组,80; 备 注,150;"));
//m_wndList.SetGridLines(true);
//设置成热激活形式
//m_wndList.SetExtendedStyle(LVS_EX_TRACKSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_wndList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_wndList.InsertColumn( 0 , _T(" 姓 名") , LVCFMT_LEFT , 100 , 0);
m_wndList.InsertColumn( 1 , _T(" 昵 称") , LVCFMT_LEFT , 80 , 1);
if ( this->m_pMainFrame->GetUserPurview_HideNum() )
{
m_wndList.InsertColumn( 2 , _T("手机号码") , LVCFMT_LEFT , 65 , 2); //隐藏号码
CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)m_wndList.GetHeaderCtrl();
pHeaderCtrl->EnableWindow( FALSE ) ;
}
else
{
m_wndList.InsertColumn( 2 , _T("手机号码") , LVCFMT_LEFT , 100 , 2);
}
m_wndList.InsertColumn( 3 , _T(" 状 态") , LVCFMT_LEFT , 70, 3);
m_wndList.InsertColumn( 4 , _T(" 用户组") , LVCFMT_LEFT , 80 , 4);
m_wndList.InsertColumn( 5 , _T(" 备 注"), LVCFMT_LEFT , 150, 5);
//初始化图标按扭
CRect rect;
m_B_Start.GetWindowRect(&rect);
this->ScreenToClient(&rect);
m_B_Start.MoveWindow( rect.left , rect.top , 44 , 44 , true );
m_B_Start.SetUnSelToolTip( _T("立即发送") );
m_B_Start.ActiveToolTip( true );
m_B_Start.SetUnSelBmp( IDB_B_START );
m_B_Start.SetFlat();
long lTemp = 44;
m_B_New2.MoveWindow( rect.left+lTemp , rect.top , 44 , 44 , true );
m_B_New2.SetUnSelToolTip( _T("重新发送本列表的手机号码") );
m_B_New2.ActiveToolTip( true );
m_B_New2.SetUnSelBmp( IDB_B_NEW2 );
m_B_New2.SetFlat();
lTemp += 44;
m_B_New.MoveWindow( rect.left+lTemp , rect.top , 44 , 44 , true );
m_B_New.SetUnSelToolTip( _T("新建发送列表") );
m_B_New.ActiveToolTip( true );
m_B_New.SetUnSelBmp( IDB_B_NEW );
m_B_New.SetFlat();
lTemp += 44;
m_B_Save.MoveWindow( rect.left+lTemp , rect.top , 44 , 44 , true );
m_B_Save.SetUnSelToolTip( _T("保存当前发送列表") );
m_B_Save.ActiveToolTip( true );
m_B_Save.SetUnSelBmp( IDB_B_SAVE );
m_B_Save.SetFlat();
lTemp += 44;
m_B_Open.MoveWindow( rect.left+lTemp , rect.top , 44 , 44 , true );
m_B_Open.SetUnSelToolTip( _T("打开已编辑好的彩信文件") );
m_B_Open.ActiveToolTip( true );
m_B_Open.SetUnSelBmp( IDB_B_OPEN );
m_B_Open.SetFlat();
lTemp += 44;
m_B_SaveAs.MoveWindow( rect.left+lTemp , rect.top , 44 , 44 , true );
m_B_SaveAs.SetUnSelToolTip( _T("将彩信保存为独立文件") );
m_B_SaveAs.ActiveToolTip( true );
m_B_SaveAs.SetUnSelBmp( IDB_B_SAVEAS );
m_B_SaveAs.SetFlat();
lTemp += 44;
m_B_Template.MoveWindow( rect.left+lTemp , rect.top , 44 , 44 , true );
m_B_Template.SetUnSelToolTip( _T("彩信模板") );
m_B_Template.ActiveToolTip( true );
m_B_Template.SetUnSelBmp( IDB_B_TEMPLATE );
m_B_Template.SetFlat();
lTemp += 44;
m_B_SC.MoveWindow( rect.left+lTemp , rect.top , 44 , 44 , true );
m_B_SC.SetUnSelToolTip( _T("彩信素材") );
m_B_SC.ActiveToolTip( true );
m_B_SC.SetUnSelBmp( IDB_B_SC );
m_B_SC.SetFlat();
lTemp += 44;
CRect rect2;
CWnd * pWnd = (CWnd *)GetDlgItem(IDC_SENDFAX_S1);
pWnd->GetWindowRect( &rect2 );
long width = rect2.right - rect2.left - (lTemp)-4;
if ( width >0 )
{
m_B_Null.MoveWindow( rect.left+lTemp , rect.top , width , 44 , true );
//m_B_Null.SetUnSelToolTip( _T("其它功能,必须在连接后并没有发送时才可使用!") );
m_B_Null.SetUnSelToolTip( _T("") );
m_B_Null.ActiveToolTip( true );
m_B_Null.SetUnSelBmp( IDB_B_NULL );
m_B_Null.SetFlat();
m_B_Null.EnableWindow(false);
}
else
{
m_B_Null.ShowWindow(SW_HIDE);
}
#if defined(SMSCENTER_IMUSIC) || defined(SHOW_MMSFILEID)
m_MMS_ID.ShowWindow(SW_SHOW);
#endif
m_bInit = true;
//启用保存ID的线程
::AfxBeginThread((AFX_THREADPROC)AutoSaveLog,(LPVOID)this,/*THREAD_PRIORITY_LOWEST*/THREAD_PRIORITY_BELOW_NORMAL);
}
void DLG_SendMms::OnSendfaxNumadd()
{
long lLen2=m_E_Num.GetWindowTextLength();
TCHAR * buf = new TCHAR[lLen2+10];
m_E_Num.GetWindowText( buf , lLen2+10 );
if ( _tcslen( buf ) <=0 )
{
MessageBox( _T("请先输入要添加的手机号码!") , _T("错误") , MB_ICONWARNING );
m_E_Num.SetFocus();
delete buf;
return ;
}
TCHAR szNum[32]={0};
int lNumLen=0;
int lMaxNumLen=16;
long lLen = _tcslen(buf);
long lMobileCount=0;
for ( int i=0 ; i<lLen ; i++ )
{
BOOL bNum=false;
if ( buf[i]>='0' && buf[i]<='9' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=buf[i];
lNumLen ++;
}
bNum = true;
}
#ifdef _UNICODE
if (!bNum && buf[i]>=L'' && buf[i]<=L'' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=(buf[i]-L'')+'0';
lNumLen ++;
}
bNum = true;
}
#endif
if( !bNum )
{
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
}
}
//最后一个号码还是要处理
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
m_E_Num.SetWindowText(_T(""));
m_E_Num.SetFocus();
if ( lMobileCount <= 0 )
{
MessageBox( _T("手机号码输入有误!\r\n多个号码请以\";\"号隔开!") , _T("错误") , MB_ICONWARNING );
}
else
{
RefreshListCount(); //刷新显示列表上的记录计数
}
delete buf;
}
void DLG_SendMms::OnSendfaxNumPaste()
{
if (!OpenClipboard())
return ;
HANDLE hclip;
TCHAR *buf=NULL;
#ifdef _UNICODE
hclip=::GetClipboardData(CF_UNICODETEXT);
#else
hclip=::GetClipboardData(CF_TEXT);
#endif
if ( !hclip )
{
CloseClipboard();
return ;
}
buf=(TCHAR*)GlobalLock(hclip);
TCHAR szNum[32]={0};
int lNumLen=0;
int lMaxNumLen=16;
long lLen = _tcslen(buf);
long lMobileCount=0;
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
for ( int i=0 ; i<lLen ; i++ )
{
BOOL bNum=false;
if ( buf[i]>='0' && buf[i]<='9' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=buf[i];
lNumLen ++;
}
bNum = true;
}
#ifdef _UNICODE
if (!bNum && buf[i]>=L'' && buf[i]<=L'' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=(buf[i]-L'')+'0';
lNumLen ++;
}
bNum = true;
}
#endif
if( !bNum )
{
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
}
}
//最后一个号码还是要处理
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
GlobalUnlock(hclip);
CloseClipboard();
RefreshListCount(); //刷新显示列表上的记录计数
}
BOOL DLG_SendMms::PreTranslateMessage(MSG* pMsg)
{
//此举是为了用户在输入号码时按了回车然后转到输入内容
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
if ( pMsg->hwnd == m_E_Num )
{
OnSendfaxNumadd();
return true;
}
}
if (pMsg->message == WM_KEYUP &&(pMsg->wParam == 'v' || pMsg->wParam =='V') )
{
//if ( pMsg->hwnd != m_E_Num && pMsg->hwnd != m_Mms_Txt && pMsg->hwnd != m_E_Title&& pMsg->hwnd!=m_D_Date && pMsg->hwnd!=m_D_Time && pMsg->hwnd!=m_Mms_Delay )
if ( pMsg->hwnd == m_wndList)
{
OnSendfaxNumPaste();
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void DLG_SendMms::AddUser(Send_User user, long lItem)
{
ExChar(user.szMobile,_T(" "));
ExChar(user.szMobile,_T("\r"));
ExChar(user.szMobile,_T("\n"));
ExChar(user.szMobile,_T("\t"));
if ( CString(user.szNickName) != CString(_T("任务号码组")) ) //任务方式
{
ExMobileGZM(user.szMobile); //去除国际码
if ( !isMmsNum( user.szMobile ) ) //不是手机号码,不用添加或修改
return ;
}
else
{
if ( !m_B_Task.GetCheck())
{
m_B_Task.SetCheck(true);
OnBnClickedSendmmsTask();
m_B_Task.EnableWindow(false);
}
if ( m_B_Task.GetCheck() )
{
//为任务模式
m_B_Task.SetCheck(true);
m_B_Task.EnableWindow(false);
}
else
{
return;
}
}
//判断是否黑名单
if ( lItem < 0 )
{
if ( this->IsLocakBack(user.szMobile ) && (m_bBackReMobile || m_lBackReMobileType==0) ) //需要显示警告,或者自动过滤
{
if ( m_bBackReMobile )
{
CString str;
str.Format( _T("%s,%s"),user.szName , user.szMobile);
DLG_AddBack dlg(str,this); //提示重复号码
dlg.DoModal();
m_bBackReMobile = dlg.m_bShowReMobile;
m_lBackReMobileType = dlg.m_lReMobileType;
}
if ( m_lBackReMobileType==0 ) //自动过滤
return;
}
}
if ( lItem < 0 )
{
if ( m_B_ReMobile.GetCheck() && (m_bShowReMobile || m_lReMobileType==0) ) //需要显示警告,或者自动过滤
{
if ( isMobileInList(user.szMobile) )
{
if ( m_bShowReMobile )
{
CString str;
str.Format( _T("%s,%s"),user.szName , user.szMobile);
DLG_AddWarning dlg(str,this); //提示重复号码
dlg.DoModal();
m_bShowReMobile = dlg.m_bShowReMobile;
m_lReMobileType = dlg.m_lReMobileType;
}
if ( m_lReMobileType==0 ) //自动过滤
return;
}
}
lItem = m_wndList.GetItemCount();
if ( m_B_Task.GetCheck() && lItem>=100 ) //任务方式不能超过100个号码
{
MessageBox(_T("当前为任务模式最多只允许添加100个号码超出的将会被丢弃\r\n如需发送私人通讯录数据,建议使用普通模式。"), _T("警告"), MB_ICONWARNING);
return ;
}
m_wndList.InsertItem( lItem , user.szName );
//插入到临时数据库
CString str;
str.Format( _T("insert into mmssendtemp (Mobile) values ('%s') " ),
SqlStr(user.szMobile) );
m_AdoRS4.Open(str,adCmdText);
}
else
{
m_wndList.SetItemText( lItem,0,user.szName );
//修改数据库
CString str,strMobile;
strMobile = m_wndList.GetItemText(lItem,1);
str.Format( _T("select top 1 * from mmssendtemp where mobile='%s' order by mobile") ,strMobile) ;
if ( m_AdoRS4.Open(str) && !m_AdoRS4.IsEOF())
{
long lID=0;
m_AdoRS4.GetCollect( _T("ItemID") , lID );
m_AdoRS4.Close();
str.Format( _T("update mmssendtemp set Mobile='%s' where ItemID=%d") ,
SqlStr(user.szMobile),
lID);
m_AdoRS4.Open(str);
}
}
m_wndList.SetItemText( lItem,1,user.szNickName );
m_wndList.SetItemText( lItem,2,user.szMobile );
if ( user.szStatus[0] == '1' )
m_wndList.SetItemText( lItem,3,_T("提交成功"));
else
if ( user.szStatus[0] == '2' )
m_wndList.SetItemText( lItem,3,_T("提交失败"));
else
m_wndList.SetItemText( lItem,3,_T("未发"));
m_wndList.SetItemText( lItem,4,user.szGroup );
m_wndList.SetItemText( lItem,5,user.szBZ );
m_wndList.SetItemData( lItem,user.lItemID);
m_bModify = true;
}
void DLG_SendMms::RefreshListCount()
{
long lCount = m_wndList.GetItemCount();
CString strMsg;
strMsg.Format( _T("发送列表 共有%d条记录") , lCount );
m_S_ListCount.SetWindowText( strMsg );
}
BOOL DLG_SendMms::IsLocakBack(CString strMobile)
{
CString str;
str.Format( _T("select * from back where Mobile='%s' and Status=1") , strMobile );
if ( m_AdoRS6.Open(str) && !m_AdoRS6.IsEOF() )
return true;
else
return false;
}
BOOL DLG_SendMms::isMobileInList(const TCHAR *pMobile)
{
CString str;
str.Format( _T("select top 1 * from mmssendtemp where Mobile='%s' order by Mobile") , pMobile );
if ( m_AdoRS4.Open(str,adCmdText,adOpenForwardOnly,adLockReadOnly) && !m_AdoRS4.IsEOF() )
return true;
else
return false;
}
BOOL DLG_SendMms::CloseList()
{
BOOL bOK=true;
if (m_bModify)
{
long lRet = MessageBox(_T("发送列表已更改,是否保存?") , _T("保存") , MB_ICONQUESTION|MB_YESNOCANCEL);
if ( lRet == IDYES )
{
bOK= List_Save();
}
if ( lRet == IDNO )
{
//新建一个列表
EnableModifyWindow( true ); //可以修改
m_B_DS.SetCheck(false); //没有定时
SYSTEMTIME t;::GetLocalTime(&t);
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
m_wndList.ShowWindow(SW_HIDE);
m_wndList.DeleteAllItems(); //没有列表
//删除临时数据库
CString str;
m_AdoRS4.Open(_T("delete from mmssendtemp where 1=1") );
m_wndList.ShowWindow(SW_SHOW);
RefreshListCount(); //刷新显示列表上的记录计数
m_E_Title.SetWindowText( _T("") ); //没有内容
OnSendfaxDs(); //设置定时
m_bModify = false;
m_lBoxID = 0;
m_lBoxType = 0; //待发短信
m_lMmsUpID = 0;
str.Format(_T("MMS ID:%d") , m_lMmsUpID);
m_MMS_ID.SetWindowText(str);
m_E_Title.SetFocus();
bOK = true;;
}
else
bOK=false; //选择了取消
}
if ( bOK )
{
Mms_Close();
if (m_pFilterGraph)
{
// Stop the filter graph first
m_pFilterGraph->Stop();
m_pFilterGraph->SetNotifyWindow(NULL);
delete m_pFilterGraph;
m_pFilterGraph = NULL;
}
}
return bOK;
}
BOOL DLG_SendMms::List_Save_mm(long & lSize)
{
m_E_Title.GetWindowText( m_strTitle );
if ( m_strTitle.GetLength() <=0 ) //内容不能为空
{
MessageBox(_T("输入的彩信标题不能为空!"),_T("错误"),MB_ICONWARNING);
m_E_Title.SetFocus();
return false;
}
_tcscpy( m_MMS_Head.szTitle , m_strTitle );
//生成彩信文件
Mms_TJ();
if ( m_MMS_Head.lSize>m_pMainFrame->m_Ans_Login2.lMmsMaxSize*1024 )
{
MessageBox(_T("所编辑的彩信超出最大限制容量,请缩减素材后重试!"),_T("错误"),MB_ICONWARNING);
return false;
}
if ( m_MMS_File )
{
delete m_MMS_File;
m_MMS_File = NULL;
}
lSize = sizeof(MMS_Head)+sizeof(MMS_Z)*m_MMS_Head.lZCount+m_MMS_Head.lSize;
m_MMS_Head.lVer = MOBSET_MMS_VER; //版本
m_MMS_File = new BYTE[lSize];
m_MMS_FileSize = lSize;
BYTE * p=m_MMS_File;
memcpy(p , &m_MMS_Head , sizeof(MMS_Head)); //头文件
p = p+sizeof(MMS_Head);
for ( int i=0 ; i<m_MMS_Head.lZCount ; i++ ) //帧
{
m_MMS_Z[i].lVer = MOBSET_MMS_VER; //版本
memcpy(p , &m_MMS_Z[i] , sizeof(MMS_Z) ); //帧头
p = p+sizeof(MMS_Z);
memcpy(p,m_MMS_Z[i].p3gp , m_MMS_Z[i].l3gpSize); //动画
p = p+m_MMS_Z[i].l3gpSize;
memcpy(p,m_MMS_Z[i].pBmp , m_MMS_Z[i].lBmpSize); //图片
p = p+m_MMS_Z[i].lBmpSize;
memcpy(p,m_MMS_Z[i].pMidi , m_MMS_Z[i].lMidiSize); //声音
p = p+m_MMS_Z[i].lMidiSize;
memcpy(p,m_MMS_Z[i].pTxt , m_MMS_Z[i].lTxtSize); //文本
p = p+m_MMS_Z[i].lTxtSize;
}
return true;
}
BOOL DLG_SendMms::List_Save(BOOL bTJ)
{
if ( !bTJ && !m_bModify ) //没有需要修改的内容,直接返回即可
return true;
TCHAR szSelect[128]={0};
COleDateTime tTimer; //定时时间
TCHAR szBoxType[8]={0};
long lSize=0;
if ( !List_Save_mm(lSize) || lSize<=0 )
return false;
/*
if ( m_wndList.GetItemCount() <= 0 )
{
MessageBox(_T("列表里没输入要发送的目标号码!"),_T("错误"),MB_ICONWARNING);
return false;
}
*/
if ( m_bAttachModify ) //做过修改,需要重新上传彩信文件
{
m_lMmsUpID = 0;
CString str;
str.Format(_T("MMS ID:%d") , m_lMmsUpID);
m_MMS_ID.SetWindowText(str);
}
if ( m_lBoxType == 0 )
_tcscpy( szBoxType, _T("0") ); //待发
else
_tcscpy( szBoxType, _T("1") ); //已发
memset(&m_tTimer,0,sizeof(m_tTimer));
if ( m_B_DS.GetCheck() ) //定时短信
{
SYSTEMTIME t={0};
SYSTEMTIME t1={0};
DateTime_GetSystemtime( m_D_Date.m_hWnd , &t );
DateTime_GetSystemtime( m_D_Time.m_hWnd , &t1 );
t.wHour = t1.wHour;
t.wMinute = t1.wMinute;
t.wSecond = 0;
tTimer = COleDateTime(t);
if ( !m_bSendSR && tTimer < COleDateTime::GetCurrentTime() ) //如果不是生日祝福,需要判断时间是否过期
{
MessageBox( _T("定时时间不能小于当前时间,请调整!") , _T("错误") , MB_ICONWARNING );
m_D_Date.SetFocus();
return false;
}
tTimer.GetAsSystemTime( m_tTimer ); //取定时时间
}
else
{
tTimer.SetStatus( COleDateTime::null );
}
if ( m_lBoxID ) //有ID,相当于修改
{
_stprintf( szSelect , _T("select * from mmsbox where BoxID=%d") , m_lBoxID );
BOOL b = m_AdoRS.Open( szSelect );
if ( b && m_AdoRS.GetRecordCount() )
{
m_AdoRS.MoveFirst();
m_AdoRS.PutCollect( _T("BoxType") , szBoxType );
m_AdoRS.PutCollect( _T("MmsUpID") , m_lMmsUpID );
m_AdoRS.PutCollect( _T("Title") , m_strTitle );
m_AdoRS.PutCollect( _T("Timer") , tTimer );
m_AdoRS.PutCollect( _T("Task") , m_B_Task.GetCheck() );
m_AdoRS.PutCollect( _T("mmSize") , m_MMS_Head.lSize );
//保存彩信
BOOL b=m_AdoRS.AppendChunk( _T("mm") , (LPVOID)m_MMS_File,lSize );
m_AdoRS.Update();
}
m_AdoRS.Close();
//删除所有原已有记录
if ( m_bModify ) //没做过修改不用修改smsitem
{
_stprintf( szSelect , _T("delete from mmsitem where BoxID=%d") , m_lBoxID );
b = m_AdoRS.Open( szSelect );
}
}
else
{
//新增
BOOL b = m_AdoRS.Open( _T("mmsbox") , adCmdTable );
if ( b )
{
m_AdoRS.AddNew();
m_AdoRS.PutCollect( _T("BoxType") , szBoxType );
m_AdoRS.PutCollect( _T("mmsUpID") , m_lMmsUpID );
m_AdoRS.PutCollect( _T("Title") , m_strTitle );
m_AdoRS.PutCollect( _T("Timer") , tTimer );
SYSTEMTIME t;::GetLocalTime(&t);
COleDateTime ot(t);
m_AdoRS.PutCollect( _T("CreateTime") ,ot );
m_AdoRS.PutCollect( _T("mmSize") , m_MMS_Head.lSize );
//保存彩信
BOOL b=m_AdoRS.AppendChunk( _T("mm") , (LPVOID)m_MMS_File,lSize );
m_AdoRS.Update();
m_AdoRS.GetCollect( _T("BoxID") , m_lBoxID ); //取得新增的BoxID
}
m_AdoRS.Close();
}
if ( !m_bModify ) //没做过修改不用修改smsitem
{
return true;
}
//启用保存Item的线程
m_bSaveList = true;
//::AfxBeginThread((AFX_THREADPROC)AutoSaveItem,(LPVOID)this,THREAD_PRIORITY_NORMAL/*THREAD_PRIORITY_BELOW_NORMAL*/);
::AfxBeginThread((AFX_THREADPROC)AutoSaveItem,(LPVOID)this,THREAD_PRIORITY_BELOW_NORMAL);
Sleep(500); //秒为延时一会
m_bModify = false; //保存完毕,没有要修改的内容
return true;
}
UINT DLG_SendMms::AutoSaveItem(void *pParam)
{
DLG_SendMms * pDlg = (DLG_SendMms *)pParam;
CString str;
try
{
//将Item添中取BoxItem
BOOL b = pDlg->m_AdoRS3.Open( _T("mmsitem") , adCmdTable );
if ( b )
{
long lCount = pDlg->m_wndList.GetItemCount();
Send_User user;
for ( int i = 0 ; i< lCount && pDlg->m_bInit ; i++ )
{
user = pDlg->GetUser(i);
pDlg->m_AdoRS3.AddNew();
pDlg->m_AdoRS3.PutCollect( _T("BoxID") , pDlg->m_lBoxID );
pDlg->m_AdoRS3.PutCollect( _T("GroupID") , user.szGroup );
pDlg->m_AdoRS3.PutCollect( _T("Name") , user.szName );
pDlg->m_AdoRS3.PutCollect( _T("NikeName") , user.szNickName );
pDlg->m_AdoRS3.PutCollect( _T("mmsNum") , user.szMobile );
pDlg->m_AdoRS3.PutCollect( _T("BZ") , user.szBZ );
pDlg->m_AdoRS3.PutCollect( _T("Status") , user.szStatus );
pDlg->m_AdoRS3.Update();
pDlg->m_AdoRS3.GetCollect( _T("ItemID") , user.lItemID ); //取新的ItemId
pDlg->m_wndList.SetItemData( i , user.lItemID ); //设置新的ItemID;
}
pDlg->m_AdoRS3.Close();
}
if ( pDlg->m_bInit )
{
/*
//因为保存了新内容,所以要刷新显示列表
if ( pDlg->m_lBoxType == 0 )
pDlg->m_pMainFrame->m_pBaseView->m_dlgSmsDF.RefreshInfo();//待发
else
pDlg->m_pMainFrame->m_pBaseView->m_dlgSmsYF.RefreshInfo();//已发
*/
}
pDlg->m_bSaveList = false;
}
catch(...)
{
return 0;
}
return 1;
}
void DLG_SendMms::CloseAutoSave(void)
{
m_bInit = false;
}
UINT DLG_SendMms::AutoSaveLog(void *pParam)
{
DLG_SendMms * pDlg = (DLG_SendMms *)pParam;
CString str;
try
{
while( pDlg->m_bInit )
{
//取队列中的内容并且开发处理
while (pDlg->m_bInit && !pDlg->m_SaveItemStatus.IsEmpty() )
{
SaveMmsStatus * pData = pDlg->m_SaveItemStatus.GetHead();
str.Format(_T("update mmsitem set SendID=%d , Status='%s' where ItemID=%d ") , pData->lSendID , pData->szStatus , pData->lItemID );
pDlg->m_AdoRS2.Open( str );
if ( pDlg->m_B_SaveSendLog.GetCheck() )
{
CString strName = pData->szName;
CString strMsg = pData->szTitle;
strName.Replace( _T("'"),_T("''"));
strMsg.Replace( _T("'"),_T("''"));
str.Format(_T("insert into mmslog (SendID,mmsFileID,SendNum,Recver,RecvNum,Title,mmSize,Status,SubTime) values (%d,%d,'%s','%s','%s','%s',%d , %d,now())"),
pData->lSendID,pData->lMmsFileID,pData->szSendNum,strName,pData->szMmsNum,strMsg,pData->lmmSize,pData->lStatus);
pDlg->m_AdoRS2.Open( str );
}
pDlg->m_SaveItemStatus.RemoveHead();
delete pData;
Sleep(5);
}
Sleep(50);
}
//清除队列中的内容
while (pDlg->m_bInit && !pDlg->m_SaveItemStatus.IsEmpty())
{
SaveMmsStatus * pData = pDlg->m_SaveItemStatus.GetHead();
pDlg->m_SaveItemStatus.RemoveHead();
delete pData;
}
}
catch(...)
{
return 0;
}
return 1;
}
void DLG_SendMms::EnableModifyWindow(BOOL bModify)
{
m_B_DS.EnableWindow( bModify );
m_D_Date.EnableWindow( bModify );
m_D_Time.EnableWindow( bModify );
m_E_Title.EnableWindow( bModify );
m_E_Num.EnableWindow( bModify );
m_B_Add.EnableWindow( bModify );
m_B_Start.EnableWindow( bModify );
m_B_Save.EnableWindow( bModify );
m_B_New.EnableWindow(bModify);
m_B_New2.EnableWindow(bModify);
m_B_Task.EnableWindow(bModify);
m_B_Open.EnableWindow(bModify);
//m_B_SaveAs.EnableWindow(bModify);
m_B_Template.EnableWindow(bModify);
m_B_SC.EnableWindow(bModify);
GetDlgItem(IDC_SENDMMS_HTML)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_Z)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_ZP)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_Z_ADD)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_Z_DEL)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_Z_CLEAR)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_DELAY)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_BMP)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_MIDI)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_TXT)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_MIDI_PLAY)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_MIDI_SLIDER)->EnableWindow(bModify);
GetDlgItem(IDC_SEND_MMS_MIDI_TIME)->EnableWindow(bModify);
//GetDlgItem(IDC_SEND_MMS_FORWARD)->EnableWindow(bModify);
//GetDlgItem(IDC_SEND_MMS_PLAY)->EnableWindow(bModify);
//GetDlgItem(IDC_SEND_MMS_NEXT)->EnableWindow(bModify);
if ( !m_pMainFrame->GetUserPurview( PURVIEW_SENDP , false ) )
{
m_E_Num.EnableWindow( false ); //没有发送私人电话本的权限
m_B_Add.EnableWindow( false );
}
m_bCtrlEnable = bModify;
}
void DLG_SendMms::OnSendfaxDs()
{
m_bModify = true;//已修改过
BOOL b = m_B_DS.GetCheck();
if ( b )
{
m_D_Date.EnableWindow( true );
m_D_Time.EnableWindow( true );
}
else
{
m_D_Date.EnableWindow( false );
m_D_Time.EnableWindow( false );
}
}
Send_User DLG_SendMms::GetUser(long lItem, BOOL bDelay)
{
Send_User user={0};
TCHAR szStatus[16]={0};
m_wndList.GetItemText( lItem , 0 , user.szName , sizeof(user.szName)-1);
m_wndList.GetItemText( lItem , 1 , user.szNickName , sizeof(user.szNickName)-1 );
m_wndList.GetItemText( lItem , 2 , user.szMobile , sizeof(user.szMobile)-1 );
m_wndList.GetItemText( lItem , 3 , szStatus , sizeof(szStatus)-1 );
m_wndList.GetItemText( lItem , 4 , user.szGroup , sizeof(user.szGroup)-1 );
m_wndList.GetItemText( lItem , 5 , user.szBZ , sizeof(user.szBZ)-1 );
user.lItemID = m_wndList.GetItemData( lItem );
if ( !_tcscmp(szStatus,_T("提交成功")) || !_tcscmp(szStatus,_T("发送成功")) )
_tcscpy(user.szStatus , _T("1") );
else
if ( !_tcscmp(szStatus,_T("提交失败")) )
_tcscpy(user.szStatus , _T("2") );
else
_tcscpy(user.szStatus , _T("0") ); //未发
return user;
}
long DLG_SendMms::GetBoxID()
{
return m_lBoxID;
}
BOOL DLG_SendMms::List_AddUser(long lCount, Send_User *pUser)
{
if ( m_B_ReMobile.GetCheck() && lCount>MAX_SENDLIST_NOTIP )
{
int iRet = MessageBox( _T("准备添加的记录数过大,是否需要判断重复号码?\r\n注:如果需要判断,则添加速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_ReMobile.SetCheck(false);
}
if ( m_lBoxType == 1 ) //如果是查看已发短信,直接新建新的短信列表
List_New();
if (m_B_Task.GetCheck())
{
long lItem = m_wndList.GetItemCount();
if (lItem + lCount > 100)
{
MessageBox(_T("当前为任务模式最多只允许添加100个号码超出的将会被丢弃\r\n如需发送私人通讯录数据,建议使用普通模式。"), _T("警告"), MB_ICONWARNING);
lCount = 100 - lItem;
if (lCount < 0) lCount = 0;
}
}
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
for ( int i = 0 ; i< lCount ; i++ )
AddUser( pUser[i] );
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
RefreshListCount(); //刷新显示列表上的记录计数
return true;
}
BOOL DLG_SendMms::List_New()
{
if ( IsSend() ) //判断是否在正在发送短信
return false;
if (!CloseList())
return false;
if ( !Mms_New() ) //创建新的mms创建时会释放原来的资源。
return false;
/*
long lCount=0;
while( m_bSaveList && lCount<50 ) //等待保存列表返回
{
Sleep(100);
}
*/
EnableModifyWindow( true ); //可以修改
m_B_DS.SetCheck(false); //没有定时
SYSTEMTIME t;::GetLocalTime(&t);
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
m_wndList.ShowWindow(SW_HIDE);
m_wndList.DeleteAllItems(); //没有列表
//删除临时数据库
CString str;
m_AdoRS4.Open(_T("delete from mmssendtemp where 1=1") );
m_wndList.ShowWindow(SW_SHOW);
RefreshListCount(); //刷新显示列表上的记录计数
m_E_Title.SetWindowText( _T("") ); //没有内容
OnSendfaxDs(); //设置定时
m_bModify = false;
m_lBoxID = 0;
m_lBoxType = 0; //待发短信
m_lMmsUpID = 0; //上传ID
str.Format(_T("MMS ID:%d") , m_lMmsUpID);
m_MMS_ID.SetWindowText(str);
m_B_Task.SetCheck(false);// 不是任务方式
OnSendTask2();
m_E_Title.SetFocus();
this->SetFocus();
//显示彩信
m_MMS_CurZ = 0;
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
Mms_Showmm();
return true;
}
BOOL DLG_SendMms::List_Read(long lBoxID)
{
if ( IsSend() ) //判断是否在正在发送短信
return false;
/*
if ( lBoxID == m_lBoxID ) //要打开的ID与已读入的ID相同不必重做
return true;
*/
if (!CloseList())
return false;
if ( !Mms_New() ) //创建新的mms创建时会释放原来的资源。
return false;
//读入基本信息
TCHAR szSelect[128]={0};
TCHAR szBuf[1024]={0};
COleDateTime ot;
_stprintf( szSelect , _T("select * from mmsbox where BoxID=%d") , lBoxID );
BOOL b = m_AdoRS.Open( szSelect );
long lCount=m_AdoRS.GetRecordCount();
CString str;
if ( b && lCount>0 )
{
m_AdoRS.MoveFirst();
m_AdoRS.GetCollect( _T("BoxType") , szBuf );
m_lBoxType = _ttol(szBuf);
m_AdoRS.GetCollect( _T("MmsUpID") , m_lMmsUpID );
m_AdoRS.GetCollect( _T("Title") , str );
m_E_Title.SetWindowText( str );
str.Format(_T("MMS ID:%d") , m_lMmsUpID);
m_MMS_ID.SetWindowText(str);
m_AdoRS.GetCollect( _T("Timer") , ot );
if ( ot.GetStatus() == COleDateTime::valid ) //有效时间
{
m_B_DS.SetCheck( true );
SYSTEMTIME t;
ot.GetAsSystemTime( t );
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
}
else
{
m_B_DS.SetCheck( false );
SYSTEMTIME t;::GetLocalTime(&t);
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
}
//是否任务模式不用读,如果是任务模式,下面加数据时会自动添加
long lb;
m_AdoRS.GetCollect(_T("Task") , lb );
m_B_Task.SetCheck(lb);
OnSendfaxDs();
OnSendTask2();
if ( m_lBoxType == 1 ) //已发,不让操作,只能查询
{
EnableModifyWindow( false ); //不可以修改
m_B_New.EnableWindow(true); //新建与重发是可以的。
m_B_New2.EnableWindow(true); //新建与重发是可以的。
}
else
{
EnableModifyWindow( true ); //可以修改
}
BOOL bRead=true;
try
{
//读入大小
long lmmSize=0;
m_AdoRS.GetCollect( _T("mmSize") , lmmSize );
//读入mm
m_MMS_FileSize=0;
m_MMS_FileSize = m_AdoRS.GetFieldActualSize( _T("mm") );
if ( m_MMS_File )
{
delete m_MMS_File;
m_MMS_File = NULL;
}
m_MMS_File = new BYTE[m_MMS_FileSize];
memset(m_MMS_File , 0 , m_MMS_FileSize );
m_AdoRS.GetChunk(_T("mm") , (LPVOID)m_MMS_File);
m_AdoRS.Close();
//恢复到mm结构中
if ( m_MMS_File && m_MMS_FileSize>0 )
{
BYTE * p = m_MMS_File;
MMS_Head * pHead = (MMS_Head *)p;
p = p+ sizeof(MMS_Head);
if ( pHead->lVer == MOBSET_MMS_VER && pHead->lSize == lmmSize && pHead->lZCount>=0 && pHead->lZCount<=MOBSET_MMS_MAX_Z ) //数据是相同的
{
m_MMS_Head = *pHead;
for ( int i=0 ; i<pHead->lZCount ; i++ )
{
MMS_Z * pZ = (MMS_Z *)p;p=p+sizeof(MMS_Z);
if ( pZ->lVer == MOBSET_MMS_VER ) //判断头是合格
{
if ( m_MMS_Z[i].p3gp )
{delete m_MMS_Z[i].p3gp ; m_MMS_Z[i].p3gp=NULL;}
if ( m_MMS_Z[i].pBmp )
{delete m_MMS_Z[i].pBmp ; m_MMS_Z[i].pBmp=NULL;}
if ( m_MMS_Z[i].pMidi )
{delete m_MMS_Z[i].pMidi ; m_MMS_Z[i].pMidi=NULL;}
if ( m_MMS_Z[i].pTxt )
{delete m_MMS_Z[i].pTxt ; m_MMS_Z[i].pTxt=NULL;}
m_MMS_Z[i] = * pZ;
//因是从文件中读取,所有指针应为空。
m_MMS_Z[i].p3gp=NULL;
m_MMS_Z[i].pBmp=NULL;
m_MMS_Z[i].pMidi=NULL;
m_MMS_Z[i].pTxt=NULL;
//恢复3gp
if ( m_MMS_Z[i].l3gpSize>0 )
{
m_MMS_Z[i].p3gp = new BYTE[m_MMS_Z[i].l3gpSize];
memcpy(m_MMS_Z[i].p3gp , p , m_MMS_Z[i].l3gpSize);
p=p+m_MMS_Z[i].l3gpSize;
}
//恢复bmp
if ( m_MMS_Z[i].lBmpSize>0 )
{
m_MMS_Z[i].pBmp = new BYTE[m_MMS_Z[i].lBmpSize];
memcpy(m_MMS_Z[i].pBmp , p , m_MMS_Z[i].lBmpSize);
p=p+m_MMS_Z[i].lBmpSize;
}
//恢复midi
if ( m_MMS_Z[i].lMidiSize>0 )
{
m_MMS_Z[i].pMidi = new BYTE[m_MMS_Z[i].lMidiSize];
memcpy(m_MMS_Z[i].pMidi , p , m_MMS_Z[i].lMidiSize);
p=p+m_MMS_Z[i].lMidiSize;
}
//恢复txt
if ( m_MMS_Z[i].lTxtSize>0 )
{
#ifdef _UNICODE
m_MMS_Z[i].pTxt = (TCHAR*)new BYTE[m_MMS_Z[i].lTxtSize];
#else
m_MMS_Z[i].pTxt = (BYTE*)new BYTE[m_MMS_Z[i].lTxtSize];
#endif
memcpy(m_MMS_Z[i].pTxt , p , m_MMS_Z[i].lTxtSize);
p=p+m_MMS_Z[i].lTxtSize;
}
}
else
{
bRead = false;
}
}
}
else
{
bRead=false;
}
}
else
{
bRead =false;
}
Mms_TJ(); //重新统计字节数
if ( m_MMS_Head.lSize != lmmSize ) //重新计数后数据不符
{
bRead =false;
}
}
catch(...)
{
bRead = false;
}
if ( !bRead ) //读入不成功,生成空白彩信
Mms_New();
//显示彩信
m_MMS_CurZ = 0;
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
Mms_Showmm();
_stprintf( szSelect , _T("select * from mmsitem where BoxID=%d") , lBoxID );
m_wndList.ShowWindow(SW_HIDE);
m_wndList.DeleteAllItems(); //没有列表
//删除临时数据库
CString str;
m_AdoRS4.Open(_T("delete from mmssendtemp where 1=1") );
m_wndList.ShowWindow(SW_SHOW);
b = m_AdoRS.Open( szSelect );
lCount=m_AdoRS.GetRecordCount();
if ( b && lCount>0 )
{
if ( m_B_ReMobile.GetCheck() && lCount>MAX_SENDLIST_NOTIP )
{
int iRet = MessageBox( _T("准备读取的记录数过大,是否需要判断重复号码?\r\n注:如果需要判断,则读取速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_ReMobile.SetCheck(false);
}
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
CAdoMmsItem adoMms;
m_AdoRS.RecordBinding( adoMms );
m_AdoRS.MoveFirst();
while( !m_AdoRS.IsEOF() )
{
Send_User user={0};
_tcscpy(user.szGroup , adoMms.m_GroupID );
_tcscpy(user.szName , adoMms.m_Name );
_tcscpy(user.szMobile , adoMms.m_MmsNum );
_tcscpy(user.szStatus , adoMms.m_Status );
_tcscpy(user.szNickName , adoMms.m_NickName );
_tcscpy(user.szBZ , adoMms.m_BZ );
user.lSendID = adoMms.m_SendID;
user.lItemID = adoMms.m_ItemID;
memset(&adoMms,0,sizeof(adoMms));
m_AdoRS.MoveNext();
AddUser(user);
}
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
}
RefreshListCount(); //刷新显示列表上的记录计数
m_lBoxID = lBoxID;
m_bModify = false; //刚刚读入,不需要修改
m_bAttachModify = false;
this->SetFocus();
return true;
}
else
{
return false;
}
return false;
}
BOOL DLG_SendMms::List_ReSend(long lBoxID)
{
if ( IsSend() ) //判断是否在正在发送短信
return false;
if (!List_Read(lBoxID))
return false;
EnableModifyWindow( true ); //可以修改
if ( m_B_Task.GetCheck() ) //如果是任务模式,重新读入后里面肯定有批量号码,所以不能再更改为非任务模式
m_B_Task.EnableWindow(false);
OnSendfaxDs(); //设置定时
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
long lCount = m_wndList.GetItemCount();
//将全部内容置为未发
for ( int i = 0 ; i< lCount ; i++ )
{
m_wndList.SetItemText( i,3,_T("未发"));
}
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
m_lBoxID = 0; //未保存
m_lBoxType = 0; //待发
m_bModify = true; //已修改
m_bAttachModify = false; //未修改
this->SetFocus();
return true;
}
BOOL DLG_SendMms::IsSend()
{
if ( m_bSend )
{
MessageBox( _T("正在发送短信中,此操作无效!") , _T("错误") , MB_ICONWARNING );
}
return m_bSend;
}
void DLG_SendMms::OnSendfaxNew2()
{
if ( m_lBoxID<=0 )
return ;
CString strTemp = _T("你选择的是\"重新发送\",本任务中所有彩信将会被再次重新发送!\r\n") \
_T("是否继续?");
int iRet = MessageBox( strTemp,_T("提问") , MB_ICONQUESTION|MB_YESNO );
if ( iRet != IDYES )
return ;
List_ReSend( m_lBoxID );
}
void DLG_SendMms::OnSendfaxNew()
{
List_New();
}
void DLG_SendMms::OnSendfaxSave()
{
if ( List_Save(true) )
this->ShowWindow( SW_HIDE );
}
void DLG_SendMms::OnDblclkSendfaxList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_User_Modify();
}
void DLG_SendMms::OnKeydownSendfaxList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
*pResult = 0;
if ( pLVKeyDow->wVKey == VK_DELETE )
{
On_User_Del();
}
if ( pLVKeyDow->wVKey == VK_INSERT)
{
On_User_Add();
}
if ( pLVKeyDow->wVKey == VK_SPACE)
{
On_User_Modify();
}
if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's')
{
On_User_Status();
}
if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
{
On_User_Status();
}
if ( pLVKeyDow->wVKey == 'C' || pLVKeyDow->wVKey == 'c')
{
On_User_Clear();
}
if ( pLVKeyDow->wVKey == 'I' || pLVKeyDow->wVKey == 'i')
{
On_User_Inport();
}
if ( pLVKeyDow->wVKey == 'E' || pLVKeyDow->wVKey == 'e')
{
On_User_Export();
}
if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
{
m_wndList.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED); //全选
//m_wndList.SelectAllItems();
}
}
void DLG_SendMms::OnDatetimechangeSendfaxDsD(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
m_bModify = true;//已修改过
}
void DLG_SendMms::OnDatetimechangeSendfaxDsT(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
m_bModify = true;//已修改过
}
void DLG_SendMms::OnRclickSendfaxList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void DLG_SendMms::ShowRMenu()
{
if ( m_lBoxType == 1 ) //列表为已发的不能编辑
return ;
if ( m_bSend ) //正在发送,不能编辑
return ;
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
//添加
if ( m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) )
{
menu.AppendMenu(MF_STRING , SEND_FAX_USER_ADD, _T(" 添加用户 ") );
menu.AppendMenu(MF_STRING , MENU_MMS_PASTE, _T(" 粘贴用户 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_ADD , _T(" 添加用户 ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_MMS_PASTE , _T(" 粘贴用户 ") );
}
menu.AppendMenu(MF_SEPARATOR );
//修改
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) && lItem >=0 && !this->m_pMainFrame->GetUserPurview_HideNum())
{
menu.AppendMenu(MF_STRING , SEND_FAX_USER_MODIFY, _T(" 修 改 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_MODIFY , _T(" 修 改 ") );
}
//删除
if ( lItem >=0 )
{
menu.AppendMenu(MF_STRING , SEND_FAX_USER_DEL, _T(" 删 除 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_DEL , _T(" 删 除 ") );
}
//清空
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , SEND_FAX_USER_CLEAR, _T(" 清 空 ") );
menu.AppendMenu(MF_SEPARATOR );
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false))
{
menu.AppendMenu(MF_STRING , SEND_FAX_USER_INPORT, _T(" 导入列表 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_INPORT, _T(" 导入列表 ") );
}
if ( !this->m_pMainFrame->GetUserPurview_HideNum() )
menu.AppendMenu(MF_STRING , SEND_FAX_USER_EXPORT, _T(" 导出列表 ") );
else
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_EXPORT, _T(" 导出列表 ") );
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , SEND_FAX_USER_STATUS, _T(" 刷新状态 ") );
//显示菜单
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
void DLG_SendMms::On_User_Add()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) )
return ;
Send_User user={0};
DLG_Send_User dlg(this);
dlg.SetParam( user );
dlg.SetEditType(3); //传真
if ( dlg.DoModal() == IDOK )
{
m_bModify = true; //已修改
user = dlg.GetParam();
AddUser( user );
RefreshListCount(); //刷新显示列表上的记录计数
}
}
void DLG_SendMms::On_User_Modify()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) )
return ;
if ( this->m_pMainFrame->GetUserPurview_HideNum() )
{
return ; //隐藏号码的,不允许修改
}
long lItem = GetCurrentSelected();
if ( lItem < 0 )
return ;
Send_User user = GetUser(lItem);
if ( user.szStatus[0] == '1' ) //发送成功
{
MessageBox( _T("因为此号码已成功发送彩信,所以不能修改!") , _T("错误") , MB_ICONWARNING );
return ;
}
if ( CString(user.szNickName) == CString(_T("任务号码组")) )
{
MessageBox( _T("任务号码组,无法修改!") , _T("错误") , MB_ICONWARNING );
return ;
}
DLG_Send_User dlg(this);
dlg.SetParam( user );
dlg.SetEditType(3); //传真
if ( dlg.DoModal() == IDOK )
{
m_bModify = true; //已修改
user = dlg.GetParam();
AddUser( user , lItem ); //重新显示内容
}
}
void DLG_SendMms::On_User_Del()
{
CString str;
long lCount = m_wndList.GetSelectedCount();
long * pDel = new long[lCount+1];
memset( pDel , 0 , sizeof(long)*lCount);
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
long i=0;
while ( pos )
{
pDel[i] = m_wndList.GetNextSelectedItem(pos);
i++;
}
m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度
for ( i = 0 ; i< lCount ; i++ )
{
Send_User user = GetUser(pDel[lCount-i-1]);
if ( user.szStatus[0] == '1' ) //发送成功的不能删除
{
continue;
}
m_wndList.DeleteItem( pDel[lCount-i-1] );
//在临时数据库中删除
str.Format( _T("select top 1 * from mmssendtemp where mobile='%s' order by mobile") ,SqlStr(user.szMobile)) ;
if ( m_AdoRS4.Open(str) && !m_AdoRS4.IsEOF())
{
long lID=0;
m_AdoRS4.GetCollect( _T("ItemID") , lID );
m_AdoRS4.Close();
str.Format( _T("delete from mmssendtemp where ItemID=%d") , lID );
m_AdoRS4.Open(str);
}
}
m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度
delete pDel;
m_bModify = true;//已修改过
RefreshListCount(); //刷新显示列表上的记录计数
}
void DLG_SendMms::On_User_Clear()
{
m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度
CString str;
//需要倒转删除
long lCount=m_wndList.GetItemCount();
for ( int i = 0 ; i<lCount;i++)
{
Send_User user = GetUser(lCount-i-1);
if ( user.szStatus[0] == '1' ) //发送成功的不能删除
{
continue;
}
m_wndList.DeleteItem( lCount-i-1 );
//在临时数据库中删除
str.Format( _T("select top 1 * from mmssendtemp where mobile='%s' order by mobile") ,SqlStr(user.szMobile)) ;
if ( m_AdoRS4.Open(str) && !m_AdoRS4.IsEOF())
{
long lID=0;
m_AdoRS4.GetCollect( _T("ItemID") , lID );
m_AdoRS4.Close();
str.Format( _T("delete from mmssendtemp where ItemID=%d") , lID );
m_AdoRS4.Open(str);
}
}
m_bModify = true;//已修改过
m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度
RefreshListCount(); //刷新显示列表上的记录计数
}
void DLG_SendMms::On_User_Inport()
{
if ( m_B_ReMobile.GetCheck() )
{
int iRet = MessageBox( _T("将要导入发送记录,是否需要判断重复号码?\r\n注:如果需要判断,则导入速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_ReMobile.SetCheck(false);
}
m_wndList.ShowWindow(SW_HIDE); //加快显示速度
Inport_Field Field[] =
{
{_T("姓名"),0,0,-1},
//{_T("昵称"),0,1,-1},
//{_T("性别"),0,2,-1},
//{_T("生日"),0,3,-1},
//{_T("公司"),0,4,-1},
//{_T("职务"),0,5,-1},
//{_T("地址"),0,6,-1},
{_T("手机号码"),0,7,-1},
//{_T("电话"),0,8,-1},
//{_T("传真"),0,9,-1},
//{_T("Email"),0,10,-1},
//{_T("QQ号码"),0,11,-1},
//{_T("备注"),0,12,-1},
};
DLG_User_InportP2 dlg(this);
dlg.SetParam(&Field[0],sizeof(Field)/sizeof(Inport_Field),8);
//DLG_Send_Inport dlg(this);
//dlg.SetInport(true);
dlg.DoModal();
RefreshListCount(); //刷新显示列表上的记录计数
m_wndList.ShowWindow(SW_SHOW); //加快显示速度
}
void DLG_SendMms::On_User_Export()
{
if ( this->m_pMainFrame->GetUserPurview_HideNum() )
{
return ; //隐藏号码的,不允许导出
}
DLG_Send_Inport dlg(this);
dlg.SetInport(false);
dlg.SetType(3); //Mms
dlg.DoModal();
}
void DLG_SendMms::On_User_Status()
{
}
long DLG_SendMms::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
void DLG_SendMms::OnChangeSendFaxTitle()
{
m_bModify=true;
m_bAttachModify = true;
}
LRESULT DLG_SendMms::OnDrop(WPARAM wParam, LPARAM lParm)
{
if ( m_lBoxType== 1 ) //已发列表不能编辑
{
MessageBox( _T("对不起,已发的列表不能再添加发送号码!") , _T("错误") , MB_ICONWARNING );
return false;
}
// if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDG) )
// return false;
COleDataObject * pData = (COleDataObject *)wParam;
UINT iCF = ::RegisterClipboardFormat( _T("CORPSMS_USER") );
if( pData->IsDataAvailable( iCF ) )
{
HGLOBAL hMem = pData->GetGlobalData( iCF );
BYTE * lp = (BYTE *)GlobalLock((HGLOBAL) hMem);//lock source
if (lp != NULL)
{
long lCount = *(long*)lp;
Send_User* pUser = (Send_User*)(lp + sizeof(long));
if (m_B_Task.GetCheck() && CString(pUser[0].szGroup) != CString(_T("公用通讯录")))
{
long lItem = m_wndList.GetItemCount();
if (lItem + lCount > 100)
{
MessageBox(_T("当前为任务模式最多只允许添加100个号码超出的将会被丢弃\r\n如需发送私人通讯录数据,建议使用普通模式。"), _T("警告"), MB_ICONWARNING);
lCount = 100 - lItem;
if (lCount < 0) lCount = 0;
}
}
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
for ( int i = 0 ; i< lCount;i++ )
{
if ( i==0 && CString(pUser[i].szNickName)==CString(_T("任务号码组")) && CString(pUser[i].szGroup)==CString(_T("公用通讯录")) )
{
if ( m_B_Task.GetCheck() )
{
AddUser( pUser[i] );
break;
}
else
{
pUser ++;
continue; //跳过
}
}
AddUser( *pUser );
pUser ++;
}
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
RefreshListCount(); //刷新显示列表上的记录计数
}
GlobalUnlock( hMem );//unlock source
return TRUE;
}
return true;
}
void DLG_SendMms::OnSendfaxStart()
{
CString str ;
long lMaxMsgLen = m_pMainFrame->GetMaxSendMsgLen(); //取允许的最大字符数
if ( m_bSend ) //在发,现停止
{
this->SetWindowText( _T("彩信发送列表") ); //恢复默认提示信息
m_B_Start.SetUnSelToolTip( _T("立即发送") );
m_B_Start.ActiveToolTip( true );
m_B_Start.SetUnSelBmp( IDB_B_START );
m_B_Start.Invalidate();
m_bSend=false; //不在发送
if ( m_lBoxType == 1 ) //发送完成
{
EnableModifyWindow( false ); //不可修改
m_B_New.EnableWindow(true); //新建与重发是可以的。
m_B_New2.EnableWindow(true); //新建与重发是可以的。
}
else
{
//未发送完成,用户手动停止
EnableModifyWindow( true ); //还可修改
m_B_New.EnableWindow(true); //新建与重发是可以的。
m_B_New2.EnableWindow(true); //新建与重发是可以的。
}
m_MMS_FileUpLen = 0;
}
else
{
CString strTitle;
m_E_Title.GetWindowText( strTitle );
if ( strTitle.GetLength() <=0 ) //内容不能为空
{
MessageBox(_T("彩信标题不能为空,请输入!"),_T("错误"),MB_ICONWARNING);
m_E_Title.SetFocus();
return ;
}
Mms_TJ();
if ( m_MMS_Head.lSize <=0 )
{
MessageBox(_T("彩信为空,请先添加素材!"),_T("错误"),MB_ICONWARNING);
return ;
}
if ( !List_Save(true) ) //保存失败,返回
return;
m_bSend = true; //开始发送
EnableModifyWindow( false ); //因为发送可以修改
m_B_Start.SetUnSelToolTip( _T("停止发送") );
m_B_Start.ActiveToolTip( true );
m_B_Start.SetUnSelBmp( IDB_B_STOP );
m_B_Start.Invalidate();
m_B_Start.EnableWindow( true ); //允许用户手动停止发送
m_lSendIndex = 0;
m_lSendOK = 0;
m_dwBackCount=0; //黑名单数量
m_dwNoSupCount=0; //不支持号码数量
long lCount = m_wndList.GetItemCount();
if ( m_B_SaveSendLog.GetCheck() && lCount>MAX_SENDLIST_NOTIP )
{
int iRet = MessageBox( _T("准备发送的记录数过大,是否记录发送日志?\r\n注:记录发送日志的速度稍慢,但可以根据日志查询状态。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_SaveSendLog.SetCheck(false);
}
m_dwSendStartTime = GetTickCount();
m_lCurSendType = MMS_CURSENDTYPE_ID;
m_MMS_FileUpLen = 0;
SetTimer( 10 , 200 , NULL ); //启动发送
// SendNextSms();
}
}
BOOL DLG_SendMms::SendNextMms()
{
BOOL bOK=false;
switch( m_lCurSendType )
{
case MMS_CURSENDTYPE_ID:
bOK=SendNextMms_ID();
break;
case MMS_CURSENDTYPE_FILE:
bOK=SendNextMms_File();
break;
case MMS_CURSENDTYPE_NUM:
bOK=SendNextMms_Num();
break;
case MMS_CURSENDTYPE_COMPLETE:
bOK=SendNextMms_Complete();
break;
case MMS_CURSENDTYPE_ERROR:
bOK=false;
break;
default:
MessageBox(_T("发送彩信产生未知异常!") , _T("错误") , MB_ICONWARNING );
bOK=false;
break;
}
if ( bOK )
{
}
else
{
if ( m_lBoxType == 1 ) //发送完成
{
if ( m_bSend )
{
OnSendfaxStart(); //停止
}
CString strMsg;
strMsg.Format( _T("彩信发送完成,成功提交%d条!用时%d秒。%s") , m_lSendOK,(::GetTickCount()-m_dwSendStartTime)/1000,GetOtherSendRetMsg() );
MessageBox( strMsg , _T("信息") , MB_ICONASTERISK );
RefreshStatusAndLog();
}
else
{
//发送未完成,停止发送
OnSendfaxStart(); //停止发送
RefreshStatusAndLog();
}
}
return bOK;
}
BOOL DLG_SendMms::SendNextMms_ID()
{
REQ_MmsSend_ID * pMms = new REQ_MmsSend_ID;
memset(pMms , 0 , sizeof(REQ_MmsSend_ID));
pMms->lCorpID = m_pMainFrame->m_lCorpID;
pMms->lUserID = m_pMainFrame->m_lUserID;
CString strTitle;
m_E_Title.GetWindowText(strTitle);
_tcscpy(pMms->szMmsTitle , strTitle);
pMms->lMmsFileID = 0;
pMms->lmmSize = m_MMS_Head.lSize;
if ( !m_bAttachModify && this->m_lMmsUpID)
{
//int iRet = MessageBox(_T("是否继续使用上次已上传的彩信附件!\r\n如果附件已修改过请选择\"否\"。") , _T("提示") , MB_ICONQUESTION|MB_YESNO );
//if ( iRet==IDYES)
pMms->lMmsFileID = this->m_lMmsUpID;
}
m_pMainFrame->SendFrame( SMSFUNC_MMSSEND_ID , (BYTE*)pMms , sizeof(REQ_MmsSend_ID) );
SetTimer( 1 , 60000 , NULL ); //超时检测,35秒发不出算超时
SetListTextTip(_T("正在取彩信附件ID..."));
return true;
}
BOOL DLG_SendMms::SendNextMms_File()
{
CString str;
if ( m_MMS_FileUpLen >= m_MMS_FileSize )
{
m_bAttachModify = false; //上传完成,状态更改
m_lCurSendType = MMS_CURSENDTYPE_NUM;
SendNextMms();
return true;
}
long lGetLen = FAXSEND_ATTACH_UPLEN;
if (m_MMS_FileSize-m_MMS_FileUpLen < lGetLen )
{
lGetLen = m_MMS_FileSize-m_MMS_FileUpLen;
}
//准备读取数据上传
long lSize = sizeof(REQ_MmsSend_Up)+lGetLen;
BYTE * pData = new BYTE[lSize];
memset(pData , 0 , lSize );
REQ_MmsSend_Up * pUp = (REQ_MmsSend_Up *)pData;
BYTE * pFileData = pData+sizeof(REQ_MmsSend_Up);
memcpy(pFileData , m_MMS_File+m_MMS_FileUpLen , lGetLen ); //复制数据
m_MMS_FileUpLen += lGetLen;
pUp->lCorpID = m_pMainFrame->m_lCorpID;
pUp->lUserID = m_pMainFrame->m_lUserID;
pUp->lMmsFileID = this->m_lMmsUpID; //附件ID
pUp->lAllLen = m_MMS_FileSize; //总长度
pUp->lUpLen = m_MMS_FileUpLen; //已上传长度
pUp->lDataLen= lGetLen; //当次数据长度
pUp->lNumCount = m_wndList.GetItemCount(); //当次号码数量
str.Format(_T("上传附件%.2f%%...") , ((float)pUp->lUpLen/(float)(pUp->lAllLen+2))*100.0f );
m_pMainFrame->SendFrame( SMSFUNC_MMSSEND_UP , (BYTE*)pData , lSize );
SetTimer( 1 , 60000 , NULL ); //超时检测,35秒发不出算超时
SetListTextTip(str);
return true;
}
BOOL DLG_SendMms::SendNextMms_Num()
{
long lCount = m_wndList.GetItemCount();
if ( m_B_Task.GetCheck() ) //以任务模式为发
{
//以下为发送批量彩信
long lSize = sizeof(REQ_PLTaskMms_Add) + sizeof(ANS_PLTaskMms_AddData)*lCount;
BYTE * pData = new BYTE[lSize];
memset(pData , 0 , lSize );
REQ_PLTaskMms_Add * pAdd = (REQ_PLTaskMms_Add *)pData;
ANS_PLTaskMms_AddData * pAddData = (ANS_PLTaskMms_AddData *)(pData+sizeof(REQ_PLTaskMms_Add));
pAdd->lCorpID = this->m_pMainFrame->m_lCorpID;
pAdd->lUserID = this->m_pMainFrame->m_lUserID;
pAdd->lMmsFileID=this->m_lMmsUpID;
_tcscpy(pAdd->szTitle , m_strTitle );
pAdd->lmmSize= m_MMS_Head.lSize;
pAdd->tTimer = m_tTimer;
pAdd->lCount = lCount; //项目数量
pAdd->lMobileCount = 0; //号码数量
CString str;
for ( int i=0 ;i<lCount ; i++ )
{
m_wndList.GetItemText(i , 0 , pAddData->szMobileName , sizeof(pAddData->szMobileName) );
str = m_wndList.GetItemText(i, 1);
pAddData->lType = 0; //普通号码
if ( str == CString(_T("任务号码组")) )
{
str = m_wndList.GetItemText(i, 4);
if ( str == CString(_T("号码文件")) )
{
pAddData->lType = 1; //号码文件
}
if ( str == CString(_T("公用通讯录")) )
{
pAddData->lType = 2; //公用通讯录
}
}
if ( pAddData->lType == 0 )
m_wndList.GetItemText(i , 2 , pAddData->szMobileID , sizeof(pAddData->szMobileID) ); //号码
else
m_wndList.GetItemText(i , 5 , pAddData->szMobileID , sizeof(pAddData->szMobileID) ); //号码
if ( pAddData->lType==0 )
{
pAddData->lMobileCount = 1;
}
else
{
str = m_wndList.GetItemText(i, 2);
pAddData->lMobileCount = _ttol(str);
}
pAdd->lMobileCount += pAddData->lMobileCount;
pAddData ++;
}
pAdd->lUserAudit =0; //是否需要用户审核
if ( m_pMainFrame->GetUserPurview(PURVIEW_PL_AUDIT,false) && !m_pMainFrame->GetUserPurview(PURVIEW_PL_VERIFY,false) ) //需审核,但他不是审核者,就需要先审核后发送
pAdd->lUserAudit =1;
/*
//判断过滤关键字
if ( !bFilt( szMsg , pAdd->lMobileCount ) ) //过滤信息
{
if ( m_bSend )
{
OnSendStart(); //停止
}
delete pData;
return ;
}
pAdd->lFilt = m_bFilt;
_tcscpy(pAdd->szFiltWord , m_strFiltWord );
*/
m_pMainFrame->SendFrame(SMSFUNC_PLTASKMMS_ADD , pData , lSize);
m_dwSendStartTime = GetTickCount();
}
else
{
long lMaxSendCount = 10;
long lSpeed = m_pMainFrame->m_Setup.lSendSpeed;
if ( lSpeed <= 0 )
lMaxSendCount = 1;
if ( lSpeed == 1 )
lMaxSendCount = 5;
if ( lSpeed > 1 )
lMaxSendCount = 10 +(lSpeed-2)*10;
lMaxSendCount=lMaxSendCount*2;
//先生成临时存贮空间
ANS_MmsSend_Num * pTemp = new ANS_MmsSend_Num[lMaxSendCount+2];
memset( pTemp , 0 , sizeof(ANS_MmsSend_Num)*(lMaxSendCount+2) );
long lSendCount = 0;
for ( ; m_lSendIndex<lCount && lSendCount<lMaxSendCount ; m_lSendIndex++ )
{
Send_User user = GetUser(m_lSendIndex,true);
if ( user.szStatus[0] != '1' ) //未发送成功的,都要发送
{
//看是否为黑名单
if ( isBack(user.szMobile) )
{
m_wndList.SetItemText( m_lSendIndex , 3 , _T("提交失败") );
m_dwBackCount++; //黑名单数量
continue;
}
pTemp[lSendCount].lStatus = 0;
pTemp[lSendCount].lItem = m_lSendIndex;
pTemp[lSendCount].lItemID = user.lItemID; //ItemID;
_tcscpy(pTemp[lSendCount].szName , user.szName);
_tcscpy(pTemp[lSendCount].szMmsNum , user.szMobile);
lSendCount++;
}
}
if ( lSendCount<=0 ) //发送完成。
{
m_lBoxType = 1 ; //因为发送完成,列表的格式为已发
List_Save(true); //保存
delete pTemp; //删除临时变量
return false;
}
//发出指令,发送
long lSize = sizeof(REQ_MmsSend)+sizeof(ANS_MmsSend_Num)*lSendCount;
BYTE * pData = new BYTE[lSize];
memset(pData , 0 , lSize);
REQ_MmsSend * pSendSend = (REQ_MmsSend *)pData;
ANS_MmsSend_Num * pDataSend = (ANS_MmsSend_Num *)(pData + sizeof(REQ_MmsSend));
pSendSend->lCorpID = m_pMainFrame->m_lCorpID;
pSendSend->lUserID = m_pMainFrame->m_lUserID;
pSendSend->lMmsFileID=this->m_lMmsUpID;
_tcscpy(pSendSend->szTitle , m_strTitle );
pSendSend->lmmSize= m_MMS_Head.lSize;
pSendSend->tTimer = m_tTimer;
pSendSend->lCount = lSendCount;
//内容
memcpy( pDataSend , pTemp , sizeof(ANS_MmsSend_Num)*lSendCount );
delete pTemp; //删除临时变量
CString str;
str.Format( _T("彩信发送列表 正在发送... %d/%d") , m_lSendIndex , lCount);
this->SetListTextTip(str);
m_pMainFrame->SendFrame( SMSFUNC_MMSSEND , pData , lSize );
SetTimer( 1 , 60000 , NULL ); //超时检测,35秒发不出算超时
}
return true;
}
BOOL DLG_SendMms::SendNextMms_Complete()
{
return false;
}
BOOL DLG_SendMms::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
KillTimer(1); //收到返回,不会超时。
CString str;
if (pHead->lFuncType == SMSFUNC_MMSSEND_ID)
{
ANS_MmsSend_ID * pMms = (ANS_MmsSend_ID *)pFrame;
if ( pMms->lMmsFileID <=0 )
{
MessageBox(_T("取彩信文件ID失败无法发送彩信"),_T("错误") , MB_ICONWARNING );
m_lCurSendType = MMS_CURSENDTYPE_ERROR;
SendNextMms();
return true;
}
this->m_lMmsUpID = pMms->lMmsFileID; //记录当前彩信附件ID
str.Format(_T("MMS ID:%d") , m_lMmsUpID);
m_MMS_ID.SetWindowText(str);
if ( pMms->bReUp )
{
m_lCurSendType = MMS_CURSENDTYPE_FILE;
}
else
{
m_lCurSendType = MMS_CURSENDTYPE_NUM;
}
SendNextMms();
return true;
}
if (pHead->lFuncType == SMSFUNC_MMSSEND_UP)
{
ANS_MmsSend_Up * pUp = (ANS_MmsSend_Up *)pFrame;
if ( !pUp->bOK )
{
MessageBox(_T("上传附件失败,无法发送彩信!"),_T("错误") , MB_ICONWARNING );
m_lCurSendType = MMS_CURSENDTYPE_ERROR;
SendNextMms();
return true;
}
//m_MMS_FileUpLen = pUp->lUpLen;
if ( pUp->lUpLen >= pUp->lAllLen ) //本文件已上传完
{
//已上传完成
}
SendNextMms();
return true;
}
if ( pHead->lFuncType == SMSFUNC_MMSSEND) //发送短信返回
{
ANS_MmsSend * pSend = (ANS_MmsSend *)pFrame;
ANS_MmsSend_Num * pSendData = (ANS_MmsSend_Num *)(pFrame+sizeof(ANS_MmsSend));
if ( pSend->lErrCode !=0 )
{
#ifdef _UNICODE
str.Format(_T("短信提交出错,错误代码:%d。\r\n%s") , pSend->lErrCode,pSend->szErrMsg );
#else
str.Format(_T("彩信提交出错,错误代码%d。"),pSend->lErrCode);
#endif
MessageBox( str , _T("错误") , MB_ICONWARNING );
m_lCurSendType = MMS_CURSENDTYPE_ERROR;
SendNextMms();
return true;
}
if ( pSend->lCount <= 0 )
{
MessageBox( _T("彩信提交出错,未知原因!") , _T("错误") , MB_ICONWARNING );
m_lCurSendType = MMS_CURSENDTYPE_ERROR;
SendNextMms();
return true;
}
if ( pSend->lCorpID != this->m_pMainFrame->m_lCorpID ||
pSend->lUserID != this->m_pMainFrame->m_lUserID ) //非自己提交的短信,不显示
{
return true;
}
for ( int i = 0 ; i< pSend->lCount ; i ++ )
{
//将结果写到列表
TCHAR szStatus[2]={0};
if ( pSendData->lStatus == SEND_STATUS_SUB_OK || pSendData->lStatus == SEND_STATUS_SUB_FILT )
{
m_wndList.SetItemText( pSendData->lItem , 3 , _T("提交成功") );
szStatus[0] = '1' ; //提交成功
m_lSendOK ++; //提交成功计数
}
else
{
m_wndList.SetItemText( pSendData->lItem , 3 , _T("提交失败") );
szStatus[0] = '2' ; //提交失败
if ( pSendData->lStatus != SEND_STATUS_SUB_NUMNOSUP ) //如果返回不是联通的号码,则不继续发送
{
CString strMsg;
switch (pSendData->lStatus)
{
case SEND_STATUS_SUB_USERNOSMS:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:你的可用余额不足,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() );
break;
case SEND_STATUS_SUB_CORPNOSMS:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:企业的可用余额不足,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_SUB_CORPOVRDATE:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:企业已过期,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_OVERCOUNT:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:已超当天最大发送量,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_NOSY:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:此帐号不支持深夜发送彩信,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
default:
#ifdef _UNICODE
strMsg.Format( _T("提交短信失败,共已发送%d条短信!\r\n错误原因:%s!\r\n%s"),m_lSendOK,pSend->szErrMsg,GetOtherSendRetMsg() ) ;
#else
strMsg.Format( _T("提交短信失败,共已发送%d条短信!\r\n错误原因:原因未明,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
#endif
break;
}
MessageBox( strMsg , _T("错误") , MB_ICONWARNING );
m_lCurSendType = MMS_CURSENDTYPE_ERROR;
SendNextMms();
return true;
}
else
{
m_dwNoSupCount++; //不支持号码数量
}
}
//将结果插入队列,由线程写入数据库
SaveMmsStatus * pStatus = new SaveMmsStatus;
memset(pStatus , 0 , sizeof(SaveMmsStatus));
_tcscpy(pStatus->szStatus , szStatus );
pStatus->lSendID = pSendData->lSendID;
pStatus->lMmsFileID = pSend->lMmsFileID;
pStatus->lItemID = pSendData->lItemID;
pStatus->lStatus = pSendData->lStatus;
pStatus->lmmSize = pSend->lmmSize;
_tcscpy(pStatus->szSendNum,pSendData->szSendNum);
_tcscpy(pStatus->szName,pSendData->szName);
_tcscpy(pStatus->szTitle,pSend->szTitle);
_tcscpy(pStatus->szMmsNum,pSendData->szMmsNum);
m_SaveItemStatus.AddTail(pStatus);
pSendData ++; //处理下一条
}
if ( m_bSend ) //还在发送,可以发送下一条
SendNextMms();
}
if (pHead->lFuncType == SMSFUNC_PLTASKMMS_ADD)
{
KillTimer(1); //收到返回,不会超时。
ANS_PLTaskMms_Add * pSend = (ANS_PLTaskMms_Add *)pFrame;
if ( pSend->lPLTaskMmsID <= 0 )
{
if ( m_bSend )
{
OnSendfaxStart();
}
str.Format( _T("彩信任务提交出错,%s。\r\n请转到彩信任务刷新验证提交是否成功。") , pSend->szErrMsg);
MessageBox(str , _T("错误") , MB_ICONWARNING );
RefreshStatusAndLog();
return true;
}
else
{
long lCount=m_wndList.GetItemCount();
for ( int i=0 ; i<lCount ; i++ )
{
m_wndList.SetItemText(i , 3 , _T("提交成功") );
}
//短信发送完成
m_lBoxType = 1 ; //因为发送完成,列表的格式为已发
List_Save(true); //保存
//str.Format( _T("update MmsBox set Status='1' where BoxID=%d") ,m_lBoxID );
//m_AdoRS.Open(str);
//m_AdoRS.Close();
if ( m_bSend )
{
OnSendfaxStart(); //停止
}
str.Format( _T("彩信任务提交完成,用时%d秒。\r\n可转到彩信任务中刷新查看状态。") , (::GetTickCount()-m_dwSendStartTime)/1000 );
MessageBox( str , _T("信息") , MB_ICONASTERISK );
RefreshStatusAndLog();
}
return true;
}
return false;
}
void DLG_SendMms::RefreshStatusAndLog()
{
//再次点击此类项目后刷新
m_pMainFrame->m_pBaseView->m_dlgMmsDF.m_bRefresh = false;
m_pMainFrame->m_pBaseView->m_dlgMmsYF.m_bRefresh = false;
m_pMainFrame->m_pBaseView->m_dlgMmsLog.m_bRefresh = false;
/*
//发送完成,需要刷新列表
m_pMainFrame->m_pBaseView->m_dlgSmsDF.RefreshInfo();//待发
m_pMainFrame->m_pBaseView->m_dlgSmsYF.RefreshInfo();//已发
//发送完成,刷新状态
m_pMainFrame->m_pBaseView->m_dlgSmsLog.RefreshInfo(); //发送日志
*/
}
void DLG_SendMms::SetListTextTip(CString str)
{
SetWindowText(str);
}
BOOL DLG_SendMms::isBack(const TCHAR *pMobile)
{
BOOL bBack = false;
for ( int i=0;i<m_pMainFrame->m_lBackCount;i++ )
{
if ( !_tcscmp(m_pMainFrame->m_pBack[i].szMobile , pMobile ) )
{
bBack = true;
break;
}
}
return bBack;
}
CString DLG_SendMms::GetOtherSendRetMsg()
{
CString str=_T("\r\n\r\n其中:");
CString strTemp;
BOOL bFirst=true;
if (m_dwBackCount>0 )
{
if ( !bFirst )
{
str += _T("   ");
}
else
{
bFirst = false;
}
strTemp.Format( _T("黑名单数量:%d\r\n") , m_dwBackCount );
str += strTemp;
}
if (m_dwNoSupCount>0 )
{
if ( !bFirst )
{
str += _T("   ");
}
else
{
bFirst = false;
}
strTemp.Format( _T("不支持数量:%d\r\n") , m_dwNoSupCount );
str += strTemp;
}
if (m_dwNoMsgCount>0 )
{
if ( !bFirst )
{
str += _T("   ");
}
else
{
bFirst = false;
}
strTemp.Format( _T("内容空数量:%d\r\n") , m_dwNoMsgCount );
str += strTemp;
}
if ( bFirst ) //没有任何数据
str = _T("");
return str;
}
BOOL DLG_SendMms::Mms_Showmm()
{
CString strHtml;
CString strHtmlHead;
CString strMusic;
m_strEndMidiFile = CString(_T(""));
this->Graph_Destroy();
//strHtml=_T("<html><body scroll='no' leftmargin='0' topmargin='0' style='overflow-x: hidden; overflow-y: hidden; width: 100%; border-width=0; border-style:none'>");
strHtmlHead=_T("<!DOCTYPE html>\r\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title>首易彩信编辑</title></head><body scroll='no' leftmargin='1' topmargin='0' style=\"border-width=0; border-style:none;%s\" > ");
if ( m_MMS_Z[m_MMS_CurZ].l3gpSize<=0 && m_MMS_Z[m_MMS_CurZ].lBmpSize<=0 && m_MMS_Z[m_MMS_CurZ].lMidiSize<=0 && m_MMS_Z[m_MMS_CurZ].lTxtSize<=0 )
{
strHtml+=_T("<p align=\"left\"><H3><br>本帧空白,请点击右边按扭添加相关素材!<br></H3></p>");
}
else
{
CString str;
CString strFileName;
TCHAR szPath[512]={0};
this->m_pMainFrame->GetCurrentPath(szPath);
_tcscat(szPath , _T("mms") );
::CreateDirectory(szPath , NULL ); //有理没理,先创建文件夹
Mms_DeleteDirectory(szPath); //将文件夹所有文件先删除
if ( m_MMS_Z[m_MMS_CurZ].pBmp && m_MMS_Z[m_MMS_CurZ].lBmpSize>0 )
{
//生成图片文件
strFileName.Format(_T("%s\\%s") , szPath , m_MMS_Z[m_MMS_CurZ].szBmpFileName );
CFile file;
if ( file.Open(strFileName , CFile::modeCreate|CFile::modeWrite) )
{
file.Write(m_MMS_Z[m_MMS_CurZ].pBmp , m_MMS_Z[m_MMS_CurZ].lBmpSize );
file.Close();
CString strFileName2 = strFileName;
//生成html指令
if (strFileName2.Find(_T("mp4")) >= 0 ||
strFileName2.Find(_T("3gp")) >= 0)
{
//str.Format(_T("<p align=\"center\"><video src=\"%s\" controls width=\"200\"></p>"), strFileName);
str.Format(_T("<p align=\"center\"><img src=\"%s\" width=\"100\" height=\"100\" align=\"middle\"></img></p>"), strFileName);
}
else
{
str.Format(_T("<p align=\"center\"><img src=\"%s\" width=\"200\" align=\"middle\"></img></p>"), strFileName);
}
strHtml += str;
}
}
if ( m_MMS_Z[m_MMS_CurZ].pMidi && m_MMS_Z[m_MMS_CurZ].lMidiSize>0 )
{
//生成声音文件
strFileName.Format(_T("%s\\%s") , szPath , m_MMS_Z[m_MMS_CurZ].szMidiFileName );
CFile file;
if ( file.Open(strFileName , CFile::modeCreate|CFile::modeWrite) )
{
file.Write(m_MMS_Z[m_MMS_CurZ].pMidi , m_MMS_Z[m_MMS_CurZ].lMidiSize );
file.Close();
m_strEndMidiFile = strFileName;
//生成Muise图标
CString Type="PNG";
HRSRC res=FindResource (NULL,MAKEINTRESOURCE(IDR_MMS_MUSIC),Type);
HGLOBAL gl=LoadResource (NULL,res);
LPVOID lp=LockResource(gl);
strFileName.Format(_T("%s\\%s") , szPath , _T("Music.png") );
HANDLE fp= CreateFile(strFileName ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
DWORD a;
if (WriteFile(fp,lp,SizeofResource(NULL,res),&a,NULL))
{
//strMusic.Format(_T("<img src=\"%s\"></img>"), strFileName);
strMusic.Format(_T("background-attachment: fixed;background-image:url('%s');background-position: right bottom;background-repeat: no-repeat;"),strFileName);
}
CloseHandle (fp);
FreeResource (gl);
/*
TCHAR szFile[512];
GetModuleFileName(NULL,szFile,sizeof(szFile));
if (GetModuleFileName(NULL, szFile, sizeof(szFile)))
{
//strMusic.Format(_T("<img src=\"res://%s/PNG/IDR_MMS_MUSIC\"></img>"), szFile);
strMusic.Format(_T("<img src=\"res://%s/2/IDB_MMS_BACK\"></img>"), szFile);
//strMusic.Format(_T("<img src=\"res://CorpSms.exe/Bitmap/IDB_MMS_BACK\"></img>"), szFile);
}
*/
}
}
if ( m_MMS_Z[m_MMS_CurZ].pTxt && m_MMS_Z[m_MMS_CurZ].lTxtSize>0 )
{
strFileName = (TCHAR*)m_MMS_Z[m_MMS_CurZ].pTxt;
//str.Format(_T("<p align=\"left\"><CODE>%s</CODE></p>") , strFileName );
//str.Format(_T("<pre style=\"word-break: break-all; word-wrap:break-word;border:1px solid #555\">%s</pre>") , strFileName );
str.Format(_T("<pre style=\"word-break: break-all; word-wrap:break-word;\">%s</pre>") , strFileName );
strHtml += str;
}
}
strHtml+= _T("</body></html>");
CString strHtml3;
strHtml3.Format(strHtmlHead,strMusic);
strHtml3+=strHtml;
CStringA strHtml2;
#ifdef _UNICODE
strHtml2=this->ConvertUnicodeToUtf8(strHtml3);
#else
strHtml2 = strHtml3;
ConvertGBKToUtf8(strHtml2);
#endif;
#ifdef _DEBUG
CFile file(_T("d:\\abc.html") , CFile::modeCreate|CFile::modeReadWrite);
file.Write(strHtml2,strHtml2.GetLength());
file.Close();
#endif
IHTMLDocument2* pDoc = (IHTMLDocument2*)m_Html.GetHtmlDocument();
if ( !pDoc )
{
return false;
}
HGLOBAL hMem;
LPSTREAM pStream;
IPersistStreamInit *pPersistStream;
hMem = ::GlobalAlloc(GPTR, (strHtml2.GetLength() + 1));
strcpy((char *)hMem, strHtml2);
HRESULT hr = ::CreateStreamOnHGlobal(hMem, TRUE, &pStream);
if(FAILED(hr))
{
::GlobalFree(hMem);
return false;
}
hr = pDoc->QueryInterface(IID_IPersistStreamInit, (void**)&pPersistStream);
pDoc->Release();
if(FAILED(hr))
{
::GlobalFree(hMem); //能运行到这里,说明GetHtmlDocument()返回的对象没有IID_IPersistStreamInit接口,没道理呀!
return false;
}
if(pPersistStream == NULL)
{
pStream->Release();
return false;
}
hr = pPersistStream->InitNew();
hr = pPersistStream->Load(pStream);
hr = pPersistStream->Release();
pStream->Release();
Mms_ShowPlayMidi();
Mms_Showscroll();
return true;
}
BOOL DLG_SendMms::Mms_Showscroll()
{
HRESULT hr;
IHTMLDocument2* pDoc = (IHTMLDocument2*)m_Html.GetHtmlDocument();
if ( !pDoc )
{
return false;
}
/*
IHTMLDocument3 *piDoc3 = NULL;
IHTMLElement *piDocElement = NULL;
IHTMLElement2 *piDocElement2 = NULL;
pDoc->QueryInterface(__uuidof(IHTMLDocument3), (void**) &piDoc3);
piDoc3->get_documentElement(&piDocElement);
piDocElement->QueryInterface(__uuidof(IHTMLElement2), (void**) &piDocElement2);
long l=0;
piDocElement2->get_clientHeight(&l);
*/
IHTMLElement *phtmlElement = NULL;
pDoc->get_body(&phtmlElement);
pDoc->Release();
if ( !phtmlElement )
{
return false;
}
IHTMLElement2 *phtmlElement2 = NULL;
hr = phtmlElement->QueryInterface(IID_IHTMLElement2, (void**)&phtmlElement2);
if(FAILED(hr))
{
phtmlElement->Release();
return false;
}
if ( !phtmlElement2)
{
phtmlElement->Release();
return false;
}
long lHeight=0;
long lHeight4=0;
phtmlElement2->get_clientHeight(&lHeight);
phtmlElement2->get_scrollHeight(&lHeight4);
phtmlElement2->Release();
/*
long lHeight2=0;
CRect rect;
m_Html.GetWindowRect(&rect);
lHeight2=rect.Height();
*/
IHTMLBodyElement *phtmlbody = NULL;
phtmlElement->QueryInterface(IID_IHTMLBodyElement, (void**)&phtmlbody);
if(phtmlbody != NULL)
{
if (lHeight<lHeight4)
phtmlbody->put_scroll(L"yes");
else
phtmlbody->put_scroll(L"no");
phtmlbody->Release();
phtmlElement->Release();
}
phtmlElement->Release();
return true;
}
void DLG_SendMms::OnSendMmsMidi()
{
CMenu menu;
menu.CreatePopupMenu();
if ( m_MMS_Z[m_MMS_CurZ].lMidiSize<=0 ) //还没有图片
{
menu.AppendMenu(MF_STRING , MENU_MMS_MIDI_INS , _T(" 插入声音 ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_MMS_MIDI_REP , _T(" 替换声音 ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_MMS_MIDI_DEL , _T(" 删除声音 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_MMS_MIDI_INS , _T(" 插入声音 ") );
menu.AppendMenu(MF_STRING , MENU_MMS_MIDI_REP , _T(" 替换声音 ") );
menu.AppendMenu(MF_STRING , MENU_MMS_MIDI_DEL , _T(" 删除声音 ") );
}
//显示菜单
RECT rect;
m_Mms_Midi.GetWindowRect(&rect);
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON | TPM_RIGHTBUTTON,rect.left,rect.bottom, this, NULL);
menu.DestroyMenu();
}
BOOL DLG_SendMms::Mms_New()
{
Mms_Close();
return true;
}
BOOL DLG_SendMms::Mms_Close()
{
for ( int i=0 ; i<m_MMS_Head.lZCount ; i++ )
{
Mms_Close_Z(m_MMS_Z[i],true);
}
memset(&m_MMS_Z,0,sizeof(m_MMS_Z));
memset(&m_MMS_Head , 0 , sizeof(MMS_Head));
m_MMS_Head.lVer = MOBSET_MMS_VER;
m_MMS_Head.lZCount = 1; //默认有1帧
m_MMS_Head.lSize = 0;
m_MMS_CurZ = 0;
if ( m_MMS_File )
{
delete m_MMS_File;
m_MMS_File = NULL;
}
if (m_bMmsPlay) //正在播放彩信,停止
OnSendMmsPlay();
if (m_bMidiPlay) //正在播放音乐,停止
OnSendMmsMidiPlay();
if ( m_bInit )
{
Mms_Showmm();
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
}
return true;
}
BOOL DLG_SendMms::Mms_Close_Z(MMS_Z & mms,BOOL bDel)
{
memset(mms.sz3gpFileName , 0 , sizeof(mms.sz3gpFileName) );
memset(mms.szBmpFileName , 0 , sizeof(mms.szBmpFileName) );
memset(mms.szMidiFileName , 0 , sizeof(mms.szMidiFileName) );
memset(mms.szTxtFileName , 0 , sizeof(mms.szTxtFileName) );
if ( mms.p3gp )
{
if ( bDel )
delete mms.p3gp;
mms.p3gp = NULL;
mms.l3gpSize=0;
}
if ( mms.pBmp )
{
if ( bDel )
delete mms.pBmp;
mms.pBmp = NULL;
mms.lBmpSize=0;
}
if ( mms.pMidi )
{
if ( bDel )
delete mms.pMidi;
mms.pMidi = NULL;
mms.lMidiSize=0;
}
if ( mms.pTxt )
{
if ( bDel )
delete mms.pTxt;
mms.pTxt = NULL;
mms.lTxtSize=0;
}
mms.lDelay = 0;
memset(&mms , 0 , sizeof(mms));
return true;
}
void DLG_SendMms::OnSendMmsZp()
{
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING , MENU_MMS_Z_ADDEND , _T(" 尾部插入新帧 ") );
menu.AppendMenu(MF_STRING , MENU_MMS_Z_ADDBEGIN , _T(" 头部插入新帧 ") );
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , MENU_MMS_Z_ADDCEND , _T(" 当前帧后插入新帧 ") );
menu.AppendMenu(MF_STRING , MENU_MMS_Z_ADDCBEGIN , _T(" 当前帧前插入新帧 ") );
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , MENU_MMS_Z_DEL , _T(" 删除当前帧 ") );
//显示菜单
RECT rect;
m_Mms_ZP.GetWindowRect(&rect);
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON | TPM_RIGHTBUTTON,rect.left,rect.bottom, this, NULL);
menu.DestroyMenu();
}
void DLG_SendMms::On_Mms_Z_AddBegin()
{
//在头部插入帧
if ( m_MMS_Head.lZCount >= MOBSET_MMS_MAX_Z )
{
MessageBox(_T("对不起,已达最大帧数,无法再添加新帧。") , _T("错误") , MB_ICONWARNING );
return ;
}
//其它帧后移
for (int i=m_MMS_Head.lZCount ; i>=1 ; i-- )
{
m_MMS_Z[i] = m_MMS_Z[i-1];
}
m_MMS_Head.lZCount ++;
m_MMS_CurZ = 0; //当前为第一帧
Mms_Close_Z(m_MMS_Z[m_MMS_CurZ],false); //清空帧数据
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
m_bModify = true;
m_bAttachModify=true;
Mms_Showmm();
}
void DLG_SendMms::On_Mms_Z_AddEnd()
{
//在尾部插入帧
if ( m_MMS_Head.lZCount >= MOBSET_MMS_MAX_Z )
{
MessageBox(_T("对不起,已达最大帧数,无法再添加新帧。") , _T("错误") , MB_ICONWARNING );
return ;
}
m_MMS_Head.lZCount ++;
m_MMS_CurZ = m_MMS_Head.lZCount-1; //当前为最后一帧
Mms_Close_Z(m_MMS_Z[m_MMS_CurZ],false); //清空帧数据
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
m_bModify = true;
m_bAttachModify=true;
Mms_Showmm();
}
void DLG_SendMms::On_Mms_Z_AddCBegin()
{
//在当前帧前面
if ( m_MMS_Head.lZCount >= MOBSET_MMS_MAX_Z )
{
MessageBox(_T("对不起,已达最大帧数,无法再添加新帧。") , _T("错误") , MB_ICONWARNING );
return ;
}
//其它帧后移
for (int i=m_MMS_Head.lZCount ; i>=m_MMS_CurZ ; i-- )
{
m_MMS_Z[i] = m_MMS_Z[i-1];
}
m_MMS_Head.lZCount ++;
//m_MMS_CurZ = 0; //在当前帧前面插入,当前帧位置不变
Mms_Close_Z(m_MMS_Z[m_MMS_CurZ],false); //清空帧数据
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
m_bModify = true;
m_bAttachModify=true;
Mms_Showmm();
}
void DLG_SendMms::On_Mms_Z_AddCEnd()
{
//在当前帧后面
if ( m_MMS_Head.lZCount >= MOBSET_MMS_MAX_Z )
{
MessageBox(_T("对不起,已达最大帧数,无法再添加新帧。") , _T("错误") , MB_ICONWARNING );
return ;
}
//其它帧后移
for (int i=m_MMS_Head.lZCount ; i>m_MMS_CurZ ; i-- )
{
m_MMS_Z[i] = m_MMS_Z[i-1];
}
m_MMS_Head.lZCount ++;
m_MMS_CurZ ++; //当前帧加1
Mms_Close_Z(m_MMS_Z[m_MMS_CurZ],false); //清空帧数据
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
m_bModify = true;
m_bAttachModify=true;
Mms_Showmm();
}
void DLG_SendMms::On_Mms_Z_Del()
{
//删除帧
if ( m_MMS_Head.lZCount <=1)
{
MessageBox(_T("对不起,已是最后一帧,无法删除!") , _T("错误") , MB_ICONWARNING );
return ;
}
Mms_Close_Z(m_MMS_Z[m_MMS_CurZ],true); //清空帧数据
//其它帧前移
for ( int i=m_MMS_CurZ ; i<m_MMS_Head.lZCount-1 ; i++ )
{
m_MMS_Z[i] = m_MMS_Z[i+1];
}
m_MMS_Head.lZCount --;
if ( m_MMS_CurZ>=m_MMS_Head.lZCount )
m_MMS_CurZ=m_MMS_Head.lZCount -1; //当前帧位置
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
m_bModify = true;
m_bAttachModify=true;
Mms_Showmm();
}
BOOL DLG_SendMms::Mms_ResetSelZ()
{
CString str;
if ( m_MMS_Head.lZCount != m_Mms_Z.GetCount() )
{
m_Mms_Z.ResetContent();
for ( int i=0 ; i<m_MMS_Head.lZCount ; i++ )
{
str.Format(_T("第%d帧") , i+1 );
m_Mms_Z.AddString(str);
}
}
if ( m_MMS_Z[m_MMS_CurZ].lDelay == 0 )
m_Mms_Delay.SetCurSel(0);
else
{
str.Format(_T("%d秒") , m_MMS_Z[m_MMS_CurZ].lDelay);
m_Mms_Delay.SetWindowText(str);
}
if ( m_MMS_Z[m_MMS_CurZ].lBmpSize>0 && _tcslen(m_MMS_Z[m_MMS_CurZ].szBmpFileName)>0 )
{
m_Mms_Bmp.SetWindowText(m_MMS_Z[m_MMS_CurZ].szBmpFileName);
}
else
{
m_Mms_Bmp.SetWindowText(_T("插入图片/视频"));
}
if ( m_MMS_Z[m_MMS_CurZ].lMidiSize>0 && _tcslen(m_MMS_Z[m_MMS_CurZ].szMidiFileName)>0 )
{
m_Mms_Midi.SetWindowText(m_MMS_Z[m_MMS_CurZ].szMidiFileName);
}
else
{
m_Mms_Midi.SetWindowText(_T("点击插入声音"));
}
Mms_TJ();
return true;
}
BOOL DLG_SendMms::Mms_TJ()
{
CString str;
long lSize=0;
for ( int i=0 ; i<m_MMS_Head.lZCount ; i++ )
{
lSize=lSize+m_MMS_Z[i].l3gpSize+m_MMS_Z[i].lBmpSize+m_MMS_Z[i].lMidiSize+m_MMS_Z[i].lTxtSize;
}
m_MMS_Head.lSize = lSize;
str.Format(_T("%d/%d帧,%.1fk") , m_MMS_CurZ+1,m_MMS_Head.lZCount , (double)lSize/1024.0f );
m_Mms_ZS.SetWindowText(str);
return true;
}
void DLG_SendMms::On_Mms_Bmp_Ins()
{
CString str;
TCHAR szFile[ 256 ]={0};
TCHAR szFileB[ 256 ]={0};
*szFileB = NULL;
OPENFILENAME sOpen;
sOpen.lStructSize = sizeof( sOpen );
sOpen.hwndOwner = this->m_hWnd ;
sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
sOpen.lpstrFilter = TEXT("图片文件 (*.jpg,*.gif,*.png,*.mp4,*.3gp)\0*.jpg;*.jpeg;*.png;*.gif;*.mp4;*.3gp\0\0");
sOpen.lpstrDefExt = NULL;
sOpen.lpstrCustomFilter = NULL;
sOpen.nMaxCustFilter = 0;
sOpen.lpstrFile = szFile;
sOpen.nMaxFile = sizeof( szFile );
sOpen.lpstrFileTitle = szFileB;
sOpen.nMaxFileTitle = sizeof( szFileB );
sOpen.lpstrInitialDir = NULL;
sOpen.lpstrTitle = _T("打开需要发送的图片文件");
if ( !::GetOpenFileName( &sOpen ) )
{
return ;
}
CString strName = sOpen.lpstrFile;
CFile file;
if ( !file.Open(strName , CFile::modeRead ) )
{
str.Format(_T("无法打开图片文件!\r\n%s") , strName );
MessageBox(str , _T("错误") , MB_ICONWARNING );
return ;
}
//if ( file.GetLength()>MOBSET_MMS_MAX_SIZE )
if ( file.GetLength()>this->m_pMainFrame->m_Ans_Login2.lMmsMaxSize*1024 )
{
file.Close();
str.Format(_T("图片文件超过彩信最大容量,无法做为彩信发送!\r\n%s") , strName );
MessageBox(str , _T("错误") , MB_ICONWARNING );
return ;
}
if (m_MMS_Z[m_MMS_CurZ].pBmp )
{
delete m_MMS_Z[m_MMS_CurZ].pBmp;
m_MMS_Z[m_MMS_CurZ].pBmp = NULL;
m_MMS_Z[m_MMS_CurZ].lBmpSize = 0;
memset(m_MMS_Z[m_MMS_CurZ].szBmpFileName , 0 , sizeof(m_MMS_Z[m_MMS_CurZ].szBmpFileName) );
}
m_MMS_Z[m_MMS_CurZ].lBmpSize = file.GetLength();
m_MMS_Z[m_MMS_CurZ].pBmp = new BYTE[m_MMS_Z[m_MMS_CurZ].lBmpSize];
file.Read(m_MMS_Z[m_MMS_CurZ].pBmp , m_MMS_Z[m_MMS_CurZ].lBmpSize );
file.Close();
m_Mms_Bmp.SetWindowText(CFFaxDF::ExPath(strName));
_tcscpy(m_MMS_Z[m_MMS_CurZ].szBmpFileName , CFFaxDF::ExPath(strName));
m_bModify = true;
m_bAttachModify=true;
Mms_TJ();
Mms_Showmm();
}
void DLG_SendMms::On_Mms_Bmp_Rep()
{
On_Mms_Bmp_Ins();
}
void DLG_SendMms::On_Mms_Bmp_Del()
{
if (m_MMS_Z[m_MMS_CurZ].pBmp )
{
delete m_MMS_Z[m_MMS_CurZ].pBmp;
m_MMS_Z[m_MMS_CurZ].pBmp = NULL;
m_MMS_Z[m_MMS_CurZ].lBmpSize = 0;
memset(m_MMS_Z[m_MMS_CurZ].szBmpFileName , 0 , sizeof(m_MMS_Z[m_MMS_CurZ].szBmpFileName) );
}
m_Mms_Bmp.SetWindowText(_T("插入图片/视频"));
m_bModify = true;
m_bAttachModify=true;
Mms_TJ();
Mms_Showmm();
}
void DLG_SendMms::On_Mms_Midi_Ins()
{
CString str;
TCHAR szFile[ 256 ]={0};
TCHAR szFileB[ 256 ]={0};
*szFileB = NULL;
OPENFILENAME sOpen;
sOpen.lStructSize = sizeof( sOpen );
sOpen.hwndOwner = this->m_hWnd ;
sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
sOpen.lpstrFilter = TEXT("声音文件 (*.mid,*.midi,*.amr)\0*.mid;*.midi;*.amr\0\0");
sOpen.lpstrDefExt = NULL;
sOpen.lpstrCustomFilter = NULL;
sOpen.nMaxCustFilter = 0;
sOpen.lpstrFile = szFile;
sOpen.nMaxFile = sizeof( szFile );
sOpen.lpstrFileTitle = szFileB;
sOpen.nMaxFileTitle = sizeof( szFileB );
sOpen.lpstrInitialDir = NULL;
sOpen.lpstrTitle = _T("打开需要发送的声音文件");
if ( !::GetOpenFileName( &sOpen ) )
{
return ;
}
CString strName = sOpen.lpstrFile;
CFile file;
if ( !file.Open(strName , CFile::modeRead ) )
{
str.Format(_T("无法打开声音文件!\r\n%s") , strName );
MessageBox(str , _T("错误") , MB_ICONWARNING );
return ;
}
//if ( file.GetLength()>MOBSET_MMS_MAX_SIZE )
if ( file.GetLength()>this->m_pMainFrame->m_Ans_Login2.lMmsMaxSize*1024 )
{
file.Close();
str.Format(_T("声音文件超过彩信最大容量,无法做为彩信发送!\r\n%s") , strName );
MessageBox(str , _T("错误") , MB_ICONWARNING );
return ;
}
if (m_MMS_Z[m_MMS_CurZ].pMidi )
{
delete m_MMS_Z[m_MMS_CurZ].pMidi;
m_MMS_Z[m_MMS_CurZ].pMidi = NULL;
m_MMS_Z[m_MMS_CurZ].lMidiSize = 0;
memset(m_MMS_Z[m_MMS_CurZ].szMidiFileName , 0 , sizeof(m_MMS_Z[m_MMS_CurZ].szMidiFileName) );
}
m_MMS_Z[m_MMS_CurZ].lMidiSize = file.GetLength();
m_MMS_Z[m_MMS_CurZ].pMidi = new BYTE[m_MMS_Z[m_MMS_CurZ].lMidiSize];
file.Read(m_MMS_Z[m_MMS_CurZ].pMidi , m_MMS_Z[m_MMS_CurZ].lMidiSize );
file.Close();
m_Mms_Midi.SetWindowText(CFFaxDF::ExPath(strName));
_tcscpy(m_MMS_Z[m_MMS_CurZ].szMidiFileName , CFFaxDF::ExPath(strName));
m_strEndMidiFile = strName;
m_bModify = true;
m_bAttachModify=true;
Mms_TJ();
Mms_Showmm();
}
void DLG_SendMms::On_Mms_Midi_Rep()
{
On_Mms_Midi_Ins();
}
void DLG_SendMms::On_Mms_Midi_Del()
{
if (m_MMS_Z[m_MMS_CurZ].pMidi )
{
delete m_MMS_Z[m_MMS_CurZ].pMidi;
m_MMS_Z[m_MMS_CurZ].pMidi = NULL;
m_MMS_Z[m_MMS_CurZ].lMidiSize = 0;
memset(m_MMS_Z[m_MMS_CurZ].szMidiFileName , 0 , sizeof(m_MMS_Z[m_MMS_CurZ].szMidiFileName) );
}
m_Mms_Midi.SetWindowText(_T("点击插入声音"));
m_bModify = true;
m_bAttachModify=true;
Mms_TJ();
Mms_Showmm();
}
void DLG_SendMms::OnSendMmsTxt()
{
DLG_SendMms_Input dlg(this);
if (m_MMS_Z[m_MMS_CurZ].pTxt )
{
dlg.m_strMsg = (TCHAR *)m_MMS_Z[m_MMS_CurZ].pTxt;
}
if ( dlg.DoModal()==IDOK )
{
if (m_MMS_Z[m_MMS_CurZ].pTxt )
{
delete m_MMS_Z[m_MMS_CurZ].pTxt;
m_MMS_Z[m_MMS_CurZ].pTxt = NULL;
m_MMS_Z[m_MMS_CurZ].lTxtSize = 0;
memset(m_MMS_Z[m_MMS_CurZ].szTxtFileName , 0 , sizeof(m_MMS_Z[m_MMS_CurZ].szTxtFileName) );
}
m_MMS_Z[m_MMS_CurZ].lTxtSize = 0;
if ( dlg.m_strMsg.GetLength()>0 )
{
//dlg.m_strMsg.Replace(_T("\n"), _T(""));//去除,防多行
long lLen = dlg.m_strMsg.GetLength()+2;
long lLen2 = sizeof(TCHAR)*lLen;
m_MMS_Z[m_MMS_CurZ].lTxtSize = lLen2;
#ifdef _UNICODE
m_MMS_Z[m_MMS_CurZ].pTxt = new TCHAR[lLen];
#else
m_MMS_Z[m_MMS_CurZ].pTxt = (BYTE*)new TCHAR[lLen];
#endif
memset(m_MMS_Z[m_MMS_CurZ].pTxt , 0 , lLen2);
_tcscpy( m_MMS_Z[m_MMS_CurZ].szTxtFileName , _T("Input.txt") );
_tcscpy((TCHAR*)m_MMS_Z[m_MMS_CurZ].pTxt ,dlg.m_strMsg );
}
m_bModify = true;
m_bAttachModify=true;
Mms_TJ();
Mms_Showmm();
}
}
void DLG_SendMms::OnSelchangeSendMmsZ()
{
m_MMS_CurZ = m_Mms_Z.GetCurSel();
if ( m_MMS_CurZ>= m_MMS_Head.lZCount )
{
m_MMS_CurZ = m_MMS_Head.lZCount -1;
}
Mms_ResetSelZ();
Mms_Showmm();
}
BOOL DLG_SendMms::Mms_DeleteDirectory(CString sDirName)
{
CFileFind tempFind;
TCHAR sTempFileFind[512] ;
_stprintf(sTempFileFind,_T("%s\\*.*"),sDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
TCHAR sFoundFileName[512];
_tcscpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200));
if (tempFind.IsDirectory())
{
TCHAR sTempDir[512];
_stprintf(sTempDir,_T("%s\\%s"),sDirName,sFoundFileName);
Mms_DeleteDirectory(sTempDir);
}
else
{
TCHAR sTempFileName[512];
_stprintf(sTempFileName,_T("%s\\%s"),sDirName,sFoundFileName);
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
//if(!RemoveDirectory(sDirName))
//{
// return FALSE;
//}
return TRUE;
}
void DLG_SendMms::OnEditchangeSendMmsDelay()
{
CString str;
m_Mms_Delay.GetWindowText(str);
m_MMS_Z[m_MMS_CurZ].lDelay = _ttol(str);
if (m_MMS_Z[m_MMS_CurZ].lDelay<0)
m_MMS_Z[m_MMS_CurZ].lDelay = 0;
}
void DLG_SendMms::OnSelchangeSendMmsDelay()
{
SetTimer( 12 , 10 , NULL);
}
void DLG_SendMms::OnSendMmsPlay()
{
if ( !m_bCtrlEnable && !m_bMmsPlay ) //如果当前控制不允许编辑,则不需要显示播放控件状态
return;
if ( m_bMmsPlay )
{
EnableModifyWindow( true ); //不可以修改
KillTimer(21); //取消自动播放参数
m_B_Play.SetBitmaps(IDB_MMS_PLAY, RGB(0,0,0));
m_B_Play.SetTooltipText(_T("播放彩信"));
m_bMmsPlay = false;
if (m_bMidiPlay) //正在播放音乐,停止
OnSendMmsMidiPlay();
}
else
{
m_B_Play.SetBitmaps(IDB_MMS_STOP, RGB(0,0,0));
m_B_Play.SetTooltipText(_T("停止播放"));
m_bMmsPlay = true;
EnableModifyWindow( false ); //不可以修改
m_MMS_CurZ=-1;
OnSendMmsNext(); //播放下一帧
}
}
void DLG_SendMms::Graph_Destroy()
{
KillTimer(20);
m_S_Midi_Slider.SetPos(0);
m_S_Midi_Time.SetWindowText(_T("00:00 00:00"));
if (m_pFilterGraph)
{
// Stop the filter graph first
m_pFilterGraph->Stop();
m_pFilterGraph->SetNotifyWindow(NULL);
delete m_pFilterGraph;
m_pFilterGraph = NULL;
}
}
BOOL DLG_SendMms::Graph_Create(CString strFileName)
{
BOOL bOK=false;
Graph_Destroy();
m_pFilterGraph = new CDXGraph();
if (m_pFilterGraph->Create())
{
// Render the source clip
m_pFilterGraph->RenderFile(strFileName);
// Set video window and notification window
m_pFilterGraph->SetDisplayWindow(this->GetSafeHwnd());
m_pFilterGraph->SetNotifyWindow(this->GetSafeHwnd());
// Show the first frame
m_pFilterGraph->Pause();
bOK = true;
m_S_Midi_Slider.SetPos(0);
double duration = 1.;
m_pFilterGraph->GetDuration(&duration);
long lDurMin = (long)(duration+0.5f)/60;
long lDurSec = (long)(duration+0.5f)%60;
CString str;
str.Format(_T("00:00 %d:%d") , lDurMin,lDurSec);
m_S_Midi_Time.SetWindowText(str);
}
return bOK;
}
void DLG_SendMms::OnSendMmsMidiPlay()
{
if ( m_bMidiPlay )
{
if ( m_pFilterGraph )
{
m_pFilterGraph->Pause();
m_pFilterGraph->SetCurrentPosition(0);
}
m_bMidiPlay = false;
m_B_Midi_Play.SetWindowText(_T("->"));
}
else
{
if ( m_pFilterGraph )
{
m_pFilterGraph->Run();
m_bMidiPlay = true;
m_B_Midi_Play.SetWindowText(_T(""));
SetTimer(20, 200, NULL);
}
}
}
void DLG_SendMms::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if (pScrollBar->GetSafeHwnd() == m_S_Midi_Slider.GetSafeHwnd())
{
if (m_pFilterGraph)
{
// Calculate the current seeking position
double duration = 1.;
m_pFilterGraph->GetDuration(&duration);
double pos = duration * m_S_Midi_Slider.GetPos() / 100.;
m_pFilterGraph->SetCurrentPosition(pos);
}
}
else
{
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
}
// Deal with the graph events
LRESULT DLG_SendMms::OnGraphNotify(WPARAM inWParam, LPARAM inLParam)
{
IMediaEventEx * pEvent = NULL;
if (m_pFilterGraph && (pEvent = m_pFilterGraph->GetEventHandle()))
{
LONG eventCode = 0, eventParam1 = 0, eventParam2 = 0;
while (m_pFilterGraph && SUCCEEDED(pEvent->GetEvent(&eventCode, &eventParam1, &eventParam2, 0)))
{
// Spin through the events
pEvent->FreeEventParams(eventCode, eventParam1, eventParam2);
switch (eventCode)
{
case EC_COMPLETE:
OnSendMmsMidiPlay();
if ( m_bMmsPlay ) //播放完毕,自动播放下一帧
{
if ( m_MMS_Z[m_MMS_CurZ].lDelay <=0 ) //播放完成自动下一帧
OnSendMmsNext();
}
break;
case EC_USERABORT:
case EC_ERRORABORT:
OnSendMmsMidiPlay();
break;
default:
break;
}
}
}
return 0;
}
void DLG_SendMms::Mms_ShowPlayMidi()
{
if ( !m_bCtrlEnable&&!m_bMmsPlay ) //如果当前控制不允许编辑,则不需要显示播放控件状态
return;
if ( m_strEndMidiFile.GetLength() )
{
if ( m_bMidiPlay )
OnSendMmsMidiPlay(); //如果原来已在播放,先停止原来的
Graph_Create(m_strEndMidiFile);
if ( !m_bMmsPlay )
{
GetDlgItem(IDC_SEND_MMS_MIDI_PLAY)->EnableWindow(true);
GetDlgItem(IDC_SEND_MMS_MIDI_SLIDER)->EnableWindow(true);
GetDlgItem(IDC_SEND_MMS_MIDI_TIME)->EnableWindow(true);
}
if ( m_bMmsPlay ) //自动播放
{
OnSendMmsMidiPlay();
}
}
else
{
Graph_Destroy();
GetDlgItem(IDC_SEND_MMS_MIDI_PLAY)->EnableWindow(false);
GetDlgItem(IDC_SEND_MMS_MIDI_SLIDER)->EnableWindow(false);
GetDlgItem(IDC_SEND_MMS_MIDI_TIME)->EnableWindow(false);
}
if ( m_bMmsPlay )
{
if ( m_MMS_Z[m_MMS_CurZ].lDelay >0 )
{
SetTimer( 21 , m_MMS_Z[m_MMS_CurZ].lDelay*1000 , NULL); //设定播放下一帧的时间
}
else
{
if ( m_strEndMidiFile.GetLength()<=0 )
{
SetTimer( 21 , 10*1000 , NULL); //如果没有声音而且设定的时间为0默认播放时间10秒钟。
}
else
{
KillTimer(21); //使用声音的结束做为下一帧开始
}
}
}
}
void DLG_SendMms::OnSendMmsNext()
{
if ( !m_bCtrlEnable &&!m_bMmsPlay ) //如果当前控制不允许编辑,则不需要显示播放控件状态
return;
m_MMS_CurZ++;
if ( m_MMS_CurZ>= m_MMS_Head.lZCount )
{
m_MMS_CurZ = m_MMS_Head.lZCount -1;
if ( m_bMmsPlay )
{
OnSendMmsPlay(); //彩信播放完成
}
}
m_Mms_Z.SetCurSel(m_MMS_CurZ);
Mms_ResetSelZ();
Mms_Showmm();
}
void DLG_SendMms::OnSendMmsForward()
{
if ( !m_bCtrlEnable &&!m_bMmsPlay ) //如果当前控制不允许编辑,则不需要显示播放控件状态
return;
m_MMS_CurZ--;
if ( m_MMS_CurZ<0 )
{
m_MMS_CurZ = 0;
}
m_Mms_Z.SetCurSel(m_MMS_CurZ);
Mms_ResetSelZ();
Mms_Showmm();
}
void DLG_SendMms::OnSendMmsZAdd()
{
On_Mms_Z_AddCEnd();
}
void DLG_SendMms::OnSendMmsZDel()
{
On_Mms_Z_Del();
}
void DLG_SendMms::OnSendMmsZClear()
{
Mms_Close();
}
void DLG_SendMms::OnBnClickedSendmmsTask()
{
if ( m_B_Task.GetCheck() )
{
long lCount=m_wndList.GetItemCount();
if ( lCount>=100 )
{
MessageBox(_T("号码数超100不能启用任务方式请删除部分号码后重试!") , _T("错误") , MB_ICONWARNING );
m_B_Task.SetCheck(false);
return ;
}
/*
int iRet = MessageBox(_T("将要设置以任务方式发送彩信,任务方式有以下特点:\r\n1、任务方式为批量上传到服务后由服务器进行发送。\r\n2、任务方式支持按号码文件发送每组任务不超过100组号码。\r\n3、任务方式本地没有详细发送日志。\r\n4、任务为临时性质定时时间不可过长。\r\n是否继续以任务方式发送"),_T("提问") , MB_ICONQUESTION|MB_YESNO);
if ( iRet!= IDYES )
{
m_B_Task.SetCheck(false);
}
*/
}
OnSendTask2();
}
void DLG_SendMms::OnSendTask2()
{
if ( m_B_Task.GetCheck() )
{
m_B_SaveSendLog.EnableWindow(false);
m_B_SaveSendLog.SetCheck(false);
}
else
{
m_B_SaveSendLog.EnableWindow(true);
}
}
CStringA DLG_SendMms::ConvertUnicodeToUtf8(CStringW &strUni)
{
int len = WideCharToMultiByte(CP_UTF8, 0, strUni, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, strUni, -1, szUtf8, len, NULL,NULL);
CStringA strUtf8 = szUtf8;
delete[] szUtf8;
return strUtf8;
}
void DLG_SendMms::ConvertGBKToUtf8(CString &strGBK)
{
#ifdef _UNICODE
int len = WideCharToMultiByte(CP_UTF8, 0, strGBK, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, strGBK, -1, szUtf8, len, NULL,NULL);
len=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szUtf8, -1, NULL,0);
TCHAR * wszUtf8 = new TCHAR[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, szUtf8, -1, wszUtf8, len);
strGBK = wszUtf8;
delete[] szUtf8;
delete[] wszUtf8;
#else
int len=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCTSTR)strGBK, -1, NULL,0);
WCHAR * wszUtf8 = new WCHAR[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);
strGBK = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;
#endif
}
void DLG_SendMms::ConvertUtf8ToGBK(CString &strUtf8)
{
#ifdef _UNICODE
int len = WideCharToMultiByte(CP_ACP, 0, strUtf8, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, strUtf8, -1, szGBK, len, NULL,NULL);
len=MultiByteToWideChar(CP_UTF8, 0, szGBK, -1, NULL,0);
TCHAR * wszGBK = new TCHAR[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, szGBK, -1, wszGBK, len);
strUtf8 = wszGBK;
delete[] szGBK;
delete[] wszGBK;
#else
int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
WCHAR * wszGBK = new WCHAR[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, wszGBK, -1, szGBK, len, NULL,NULL);
strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
#endif
}
void DLG_SendMms::ConvertGBKToUtf8_(CStringA &strGBK)
{
int len=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, strGBK, -1, NULL,0);
WCHAR * wszUtf8 = new WCHAR[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, strGBK, -1, wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);
strGBK = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;
}
void DLG_SendMms::ConvertUtf8ToGBK_(CStringA &strUtf8)
{
int len=MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, NULL,0);
WCHAR * wszGBK = new WCHAR[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, wszGBK, -1, szGBK, len, NULL,NULL);
strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}
void DLG_SendMms::OnBnClickedSendfaxSaveas()
{
long lSize=0;
if ( !List_Save_mm(lSize) || lSize<=0 )
return;
#define FILE_FILTER_TEXT \
TEXT("彩信文件 (*.mms)\0*.mms\0")\
TEXT("所有文件 (*.*)\0*.*;\0\0")
TCHAR szFile[ 256 ];
TCHAR szFileB[ 256 ];
*szFileB = NULL;
_stprintf( szFile , _T("*.mms") );
OPENFILENAME sOpen;
sOpen.lStructSize = sizeof( sOpen );
sOpen.hwndOwner = this->m_hWnd ;
sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
sOpen.lpstrFilter = FILE_FILTER_TEXT;
sOpen.lpstrDefExt = _T("mms");
sOpen.lpstrCustomFilter = NULL;
sOpen.nMaxCustFilter = 0;
sOpen.lpstrFile = szFile;
sOpen.nMaxFile = sizeof( szFile );
sOpen.lpstrFileTitle = szFileB;
sOpen.nMaxFileTitle = sizeof( szFileB );
sOpen.lpstrInitialDir = NULL;
sOpen.lpstrTitle = _T("选择另存为彩信文件名");
if ( !::GetSaveFileName( &sOpen ) )
{
return ;
}
CString str;
CString strFileName=sOpen.lpstrFile;
CFile file;
if ( !file.Open(strFileName,CFile::modeCreate|CFile::modeReadWrite) )
{
str.Format(_T("创建彩信文件失败,%s"),strFileName);
MessageBox(str,_T("错误") , MB_ICONWARNING );
return ;
}
file.Write(m_MMS_File,lSize);
file.Close();
}
void DLG_SendMms::OnBnClickedSendfaxOpen()
{
#define FILE_FILTER_TEXT \
TEXT("彩信文件 (*.mms)\0*.mms\0")\
TEXT("所有文件 (*.*)\0*.*;\0\0")
TCHAR szFile[ 256 ];
TCHAR szFileB[ 256 ];
*szFileB = NULL;
_stprintf( szFile , _T("*.mms") );
OPENFILENAME sOpen;
sOpen.lStructSize = sizeof( sOpen );
sOpen.hwndOwner = this->m_hWnd ;
sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
sOpen.lpstrFilter = FILE_FILTER_TEXT;
sOpen.lpstrDefExt = _T("mms");
sOpen.lpstrCustomFilter = NULL;
sOpen.nMaxCustFilter = 0;
sOpen.lpstrFile = szFile;
sOpen.nMaxFile = sizeof( szFile );
sOpen.lpstrFileTitle = szFileB;
sOpen.nMaxFileTitle = sizeof( szFileB );
sOpen.lpstrInitialDir = NULL;
sOpen.lpstrTitle = _T("打开彩信文件");
if ( !::GetOpenFileName( &sOpen ) )
{
return ;
}
CString str;
CString strTitle;
CString strFileName;
strFileName = sOpen.lpstrFile;
CFile file;
if ( !file.Open(strFileName,CFile::modeRead) )
{
str.Format(_T("打开彩信文件失败,%s"),strFileName);
MessageBox(str,_T("错误") , MB_ICONWARNING );
return ;
}
if ( !Mms_New() ) //创建新的mms创建时会释放原来的资源。
{
file.Close();
return ;
}
m_lMmsUpID = 0; //重新打开了彩信文件彩信ID为0
BOOL bRead=true;
try
{
//读入大小
//long lmmSize=0;
//读入mm
m_MMS_FileSize=0;
m_MMS_FileSize = file.GetLength();
if ( m_MMS_File )
{
delete m_MMS_File;
m_MMS_File = NULL;
}
m_MMS_File = new BYTE[m_MMS_FileSize];
memset(m_MMS_File , 0 , m_MMS_FileSize );
file.Read(m_MMS_File,m_MMS_FileSize);
file.Close();
//恢复到mm结构中
if ( m_MMS_File && m_MMS_FileSize>0 )
{
BYTE * p = m_MMS_File;
MMS_Head * pHead = (MMS_Head *)p;
p = p+ sizeof(MMS_Head);
if ( pHead->lVer == MOBSET_MMS_VER /*&& pHead->lSize == lmmSize*/ && pHead->lZCount>=0 && pHead->lZCount<=MOBSET_MMS_MAX_Z ) //数据是相同的
{
m_MMS_Head = *pHead;
strTitle = m_MMS_Head.szTitle;
for ( int i=0 ; i<pHead->lZCount ; i++ )
{
MMS_Z * pZ = (MMS_Z *)p;p=p+sizeof(MMS_Z);
if ( pZ->lVer == MOBSET_MMS_VER ) //判断头是合格
{
if ( m_MMS_Z[i].p3gp )
{delete m_MMS_Z[i].p3gp ; m_MMS_Z[i].p3gp=NULL;}
if ( m_MMS_Z[i].pBmp )
{delete m_MMS_Z[i].pBmp ; m_MMS_Z[i].pBmp=NULL;}
if ( m_MMS_Z[i].pMidi )
{delete m_MMS_Z[i].pMidi ; m_MMS_Z[i].pMidi=NULL;}
if ( m_MMS_Z[i].pTxt )
{delete m_MMS_Z[i].pTxt ; m_MMS_Z[i].pTxt=NULL;}
m_MMS_Z[i] = * pZ;
//因是从文件中读取,所有指针应为空。
m_MMS_Z[i].p3gp=NULL;
m_MMS_Z[i].pBmp=NULL;
m_MMS_Z[i].pMidi=NULL;
m_MMS_Z[i].pTxt=NULL;
//恢复3gp
if ( m_MMS_Z[i].l3gpSize>0 )
{
m_MMS_Z[i].p3gp = new BYTE[m_MMS_Z[i].l3gpSize];
memcpy(m_MMS_Z[i].p3gp , p , m_MMS_Z[i].l3gpSize);
p=p+m_MMS_Z[i].l3gpSize;
}
//恢复bmp
if ( m_MMS_Z[i].lBmpSize>0 )
{
m_MMS_Z[i].pBmp = new BYTE[m_MMS_Z[i].lBmpSize];
memcpy(m_MMS_Z[i].pBmp , p , m_MMS_Z[i].lBmpSize);
p=p+m_MMS_Z[i].lBmpSize;
}
//恢复midi
if ( m_MMS_Z[i].lMidiSize>0 )
{
m_MMS_Z[i].pMidi = new BYTE[m_MMS_Z[i].lMidiSize];
memcpy(m_MMS_Z[i].pMidi , p , m_MMS_Z[i].lMidiSize);
p=p+m_MMS_Z[i].lMidiSize;
}
//恢复txt
if ( m_MMS_Z[i].lTxtSize>0 )
{
#ifdef _UNICODE
m_MMS_Z[i].pTxt = (TCHAR*)new BYTE[m_MMS_Z[i].lTxtSize];
#else
m_MMS_Z[i].pTxt = (BYTE*)new BYTE[m_MMS_Z[i].lTxtSize];
#endif
memcpy(m_MMS_Z[i].pTxt , p , m_MMS_Z[i].lTxtSize);
p=p+m_MMS_Z[i].lTxtSize;
}
}
else
{
bRead = false;
}
}
}
else
{
bRead=false;
}
}
else
{
bRead =false;
}
Mms_TJ(); //重新统计字节数
/*
if ( m_MMS_Head.lSize != lmmSize ) //重新计数后数据不符
{
bRead =false;
}
}
catch(...)
{
bRead = false;
}
*/
if ( !bRead ) //读入不成功,生成空白彩信
Mms_New();
//显示彩信
m_E_Title.SetWindowText( strTitle );
m_MMS_CurZ = 0;
Mms_ResetSelZ();
m_Mms_Z.SetCurSel(m_MMS_CurZ);
Mms_Showmm();
}
catch(...)
{
Mms_New();
}
}
void DLG_SendMms::OnOK()
{
return ;
CDialog::OnOK();
}
void DLG_SendMms::OnStnClickedSendMmsBmp()
{
CMenu menu;
menu.CreatePopupMenu();
if (m_MMS_Z[m_MMS_CurZ].lBmpSize <= 0) //还没有图片
{
menu.AppendMenu(MF_STRING, MENU_MMS_BMP_INS, _T(" 插入图片/视频 "));
menu.AppendMenu(MF_STRING | MF_DISABLED | MF_GRAYED, MENU_MMS_BMP_REP, _T(" 替换图片/视频 "));
menu.AppendMenu(MF_STRING | MF_DISABLED | MF_GRAYED, MENU_MMS_BMP_DEL, _T(" 删除图片/视频 "));
}
else
{
menu.AppendMenu(MF_STRING | MF_DISABLED | MF_GRAYED, MENU_MMS_BMP_INS, _T(" 插入图片/视频 "));
menu.AppendMenu(MF_STRING, MENU_MMS_BMP_REP, _T(" 替换图片/视频 "));
menu.AppendMenu(MF_STRING, MENU_MMS_BMP_DEL, _T(" 删除图片/视频 "));
}
//显示菜单
RECT rect;
m_Mms_Bmp.GetWindowRect(&rect);
POINT pt;
::GetCursorPos(&pt);
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, rect.left, rect.bottom, this, NULL);
menu.DestroyMenu();
}
void DLG_SendMms::OnStnClickedSendMmsTxt()
{
// TODO: 在此添加控件通知处理程序代码
}
void DLG_SendMms::OnClickedSendfaxRemobile()
{
if (m_B_ReMobile.GetCheck())
{
m_bShowReMobile = true;
m_lReMobileType = 0;
}
}