// 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='0' && buf[i]<='9' ) { if ( lNumLen<=lMaxNumLen ) { szNum[lNumLen]=buf[i]; lNumLen ++; } bNum = true; } #ifdef _UNICODE if (!bNum && buf[i]>=L'0' && buf[i]<=L'9' ) { if ( lNumLen<=lMaxNumLen ) { szNum[lNumLen]=(buf[i]-L'0')+'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='0' && buf[i]<='9' ) { if ( lNumLen<=lMaxNumLen ) { szNum[lNumLen]=buf[i]; lNumLen ++; } bNum = true; } #ifdef _UNICODE if (!bNum && buf[i]>=L'0' && buf[i]<=L'9' ) { if ( lNumLen<=lMaxNumLen ) { szNum[lNumLen]=(buf[i]-L'0')+'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 ; im_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 ; ilZCount ; 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 ; im_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 ;iszMobileName , 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_lSendIndexlCorpID = 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 ; im_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;im_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(""); strHtmlHead=_T("\r\n首易彩信编辑 "); 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("


本帧空白,请点击右边按扭添加相关素材!

"); } 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("

"), strFileName); str.Format(_T("

"), strFileName); } else { str.Format(_T("

"), 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(""), 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(""), szFile); strMusic.Format(_T(""), szFile); //strMusic.Format(_T(""), 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("

%s

") , strFileName ); //str.Format(_T("
%s
") , strFileName ); str.Format(_T("
%s
") , strFileName ); strHtml += str; } } strHtml+= _T(""); 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 (lHeightput_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 ; iClientToScreen( &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 ) 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 ; i0 && _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 ; im_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 ; ilZCount ; 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; } }