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