📄 callsmscomdlg.cpp
字号:
// CallSmsComDlg.cpp : implementation file
//
#include "stdafx.h"
#include "CallSmsCom.h"
#include "CallSmsComDlg.h"
#include "DlgProxy.h"
#include "SMService.h"
#include "OtherDemoDlg.h"
#include "SpecSmsDlg.h"
#include "XTTBasicDef.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//事件接口建立连接的Cookie
extern DWORD g_dwCookie;
//事件实现接口
extern CComObject<CMobileEvents>* g_ptrMobileEvents;
//手机短信服务接口
extern XTTSMSCOM::IModemServicePtr g_spiModemService;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCallSmsComDlg dialog
IMPLEMENT_DYNAMIC(CCallSmsComDlg, CDialog);
CCallSmsComDlg::CCallSmsComDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCallSmsComDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCallSmsComDlg)
m_bAsynConnect = TRUE;
m_bEnableSend = TRUE;
m_strModemIMEI = _T("");
m_strModemModel = _T("");
m_strModemName = _T("");
m_strModemVersion = _T("");
m_iSignal = 0;
m_strSMCA = _T("");
m_iOverTime = 30;
m_iTryTime = 1;
m_bAsynSend = TRUE;
m_bAutoDelete = FALSE;
m_strReadInfo = _T("");
m_iSendPri = 16;
m_strMsgCount = _T("");
m_strCountryCode = _T("86");
m_bAutoRouter = FALSE;
m_iCommPara = 2;
m_strSendContent = _T("欢迎您使用联移短信服务软件。");
m_strSignName = _T("小沈");
m_strSendTo = _T("13910138186");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
COleDateTime curTime=COleDateTime::GetCurrentTime();
m_EndTime = COleDateTime(curTime.GetYear(),curTime.GetMonth(),curTime.GetDay(),22,30,0);
m_StartTime = COleDateTime(curTime.GetYear(),curTime.GetMonth(),curTime.GetDay(),6,30,0);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pAutoProxy = NULL;
m_sSplitCount=0;
}
CCallSmsComDlg::~CCallSmsComDlg()
{
// If there is an automation proxy for this dialog, set
// its back pointer to this dialog to NULL, so it knows
// the dialog has been deleted.
if (m_pAutoProxy != NULL)
m_pAutoProxy->m_pDialog = NULL;
}
void CCallSmsComDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCallSmsComDlg)
DDX_Control(pDX, IDC_MODEM_SPECSMS, m_ctlSpecSms);
DDX_Control(pDX, IDC_MODEM_WRITESMCA, m_ctlWriteSmca);
DDX_Control(pDX, IDOK, m_ctlOK);
DDX_Control(pDX, IDC_MODEM_SENDMSG, m_ctlSendMsg);
DDX_Control(pDX, IDC_MODEM_READMSG, m_ctlReadMsg);
DDX_Control(pDX, IDC_MODEM_OTHERDEMO, m_ctlOtherDemo);
DDX_Control(pDX, IDC_MODEM_GETPARA, m_ctlGetPara);
DDX_Control(pDX, IDC_MODEM_GETCOUNT, m_ctlGetCount);
DDX_Control(pDX, IDC_MODEM_DELMSG, m_ctlDelMsg);
DDX_Control(pDX, IDC_MODEM_CLEAR, m_ctlClearMsg);
DDX_Control(pDX, IDC_MOBILE_DISCONNECT, m_ctlDisConnect);
DDX_Control(pDX, IDC_MOBILE_CONNECTMODEM, m_ctlConnModem);
DDX_Control(pDX, IDC_MODEM_MSGLIST, m_ctlMsgList);
DDX_Control(pDX, IDC_MOBILE_COMMLIST, m_ctlCommList);
DDX_Check(pDX, IDC_MOBILE_ASYNCONNECT, m_bAsynConnect);
DDX_Check(pDX, IDC_MOBILE_ENABLESEND, m_bEnableSend);
DDX_Text(pDX, IDC_MODEM_IMEI, m_strModemIMEI);
DDX_Text(pDX, IDC_MODEM_MODEL, m_strModemModel);
DDX_Text(pDX, IDC_MODEM_NAME, m_strModemName);
DDX_Text(pDX, IDC_MODEM_VERSION, m_strModemVersion);
DDX_Text(pDX, IDC_MODEM_SIGNAL, m_iSignal);
DDX_Text(pDX, IDC_MODEM_SMCA, m_strSMCA);
DDX_Text(pDX, IDC_MODEM_OVERTIME, m_iOverTime);
DDX_Text(pDX, IDC_MODEM_TRYTIME, m_iTryTime);
DDX_Check(pDX, IDC_MODEM_ASYNSEND, m_bAsynSend);
DDX_Check(pDX, IDC_MODEM_AUTODEL, m_bAutoDelete);
DDX_Text(pDX, IDC_MODEM_READINFO, m_strReadInfo);
DDX_Text(pDX, IDC_MODEM_SENDCONTENT, m_strSendContent);
DDX_Text(pDX, IDC_MODEM_SENDPRI, m_iSendPri);
DDX_Text(pDX, IDC_MODEM_SENDTO, m_strSendTo);
DDX_Text(pDX, IDC_MODEM_SIGNNAME, m_strSignName);
DDX_Text(pDX, IDC_MODEM_MSGCOUNT, m_strMsgCount);
DDX_Text(pDX, IDC_MODEM_COUNTRYCODE, m_strCountryCode);
DDX_DateTimeCtrl(pDX, IDC_MODEM_ENDTIME, m_EndTime);
DDX_DateTimeCtrl(pDX, IDC_MODEM_STARTTIME, m_StartTime);
DDX_Check(pDX, IDC_MODEM_AUTOROUTER, m_bAutoRouter);
DDX_CBIndex(pDX, IDC_MOBILE_COMMPARA, m_iCommPara);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCallSmsComDlg, CDialog)
//{{AFX_MSG_MAP(CCallSmsComDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_MODEM_GETPARA, OnModemGetpara)
ON_BN_CLICKED(IDC_MOBILE_DISCONNECT, OnMobileDisconnect)
ON_BN_CLICKED(IDC_MOBILE_CONNECTMODEM, OnMobileConnectmodem)
ON_BN_CLICKED(IDC_MODEM_READMSG, OnModemReadmsg)
ON_BN_CLICKED(IDC_MODEM_GETCOUNT, OnModemGetcount)
ON_BN_CLICKED(IDC_MODEM_SENDMSG, OnModemSendmsg)
ON_BN_CLICKED(IDC_MODEM_DELMSG, OnModemDelmsg)
ON_BN_CLICKED(IDC_MODEM_CLEAR, OnModemClear)
ON_BN_CLICKED(IDC_MODEM_OTHERDEMO, OnModemOtherdemo)
ON_BN_CLICKED(IDC_MODEM_WRITESMCA, OnModemWritesmca)
ON_BN_CLICKED(IDC_MODEM_SPECSMS, OnModemSpecsms)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCallSmsComDlg message handlers
BOOL CCallSmsComDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
g_spiModemService.CreateInstance(__uuidof(XTTSMSCOM::ModemService));
if(g_spiModemService==NULL)
::MessageBox(this->GetSafeHwnd(),_T("创建短信核心组件失败!"),XTTSOFT_SMS_APPNAME,MB_OK);
else
{
#ifdef NEED_FINAL_CONSTRUCT
CComObject<CMobileEvents>::CreateInstance(&(g_ptrMobileEvents));
#else
g_ptrMobileEvents = new CComObject<CMobileEvents>;
#endif
CComPtr<IUnknown> ptrEventsUnk=NULL;
if(g_ptrMobileEvents!=NULL)
g_ptrMobileEvents->QueryInterface(IID_IUnknown,(void ** )&ptrEventsUnk);
if(ptrEventsUnk!=NULL)
{
//建立事件连接
HRESULT hRet=AtlAdvise(g_spiModemService,ptrEventsUnk,
XTTSMSCOM::DIID__IModemServiceEvents,&g_dwCookie);
}
}
m_ctlCommList.SetCurSel(0);//将COM1设为默认
#ifndef _DEBUG
// m_ctlSpecSms.ShowWindow(SW_HIDE);
#endif
return TRUE; // return TRUE unless you set the focus to a control
}
void CCallSmsComDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CCallSmsComDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CCallSmsComDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
// Automation servers should not exit when a user closes the UI
// if a controller still holds on to one of its objects. These
// message handlers make sure that if the proxy is still in use,
// then the UI is hidden but the dialog remains around if it
// is dismissed.
void CCallSmsComDlg::OnClose()
{
if (CanExit())
CDialog::OnClose();
}
void CCallSmsComDlg::OnOK()
{
if (CanExit())
CDialog::OnOK();
}
void CCallSmsComDlg::OnCancel()
{
if (CanExit())
CDialog::OnCancel();
}
BOOL CCallSmsComDlg::CanExit()
{
// If the proxy object is still around, then the automation
// controller is still holding on to this application. Leave
// the dialog around, but hide its UI.
if (m_pAutoProxy != NULL)
{
ShowWindow(SW_HIDE);
return FALSE;
}
//释放短信服务接口
if(g_spiModemService!=NULL)
{
XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
g_spiModemService->get_ModemStatus(&eModemStatus);
if(eModemStatus>XTTSMSCOM::UNINIT_STATUS)
{
g_spiModemService->ClearLogInfo(2);//清除2天以前的日志记录
CComVariant varWaitSendCount;
g_spiModemService->DisConnectModem(&varWaitSendCount);//端口与短信猫的连接,返回等待发送短信的数量
varWaitSendCount.ChangeType(VT_I4);
if(varWaitSendCount.lVal!=0)
::MessageBox(this->GetSafeHwnd(),_T("还有短信没有发送!"),XTTSOFT_SMS_APPNAME,MB_OK);
}
//断开事件连接
AtlUnadvise(g_spiModemService,XTTSMSCOM::DIID__IModemServiceEvents,g_dwCookie);
g_spiModemService=NULL;
g_ptrMobileEvents=NULL;
g_dwCookie=0;
}
return TRUE;
}
void CCallSmsComDlg::OnModemGetpara()
{
// TODO: Add your control notification handler code here
XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
g_spiModemService->get_ModemStatus(&eModemStatus);
if(eModemStatus<XTTSMSCOM::OK_STATUS)
{
::MessageBox(this->GetSafeHwnd(),_T("还没有正常连接短信猫!"),XTTSOFT_SMS_APPNAME,MB_OK);
return;
}
CComVariant varTem;
g_spiModemService->get_ModemName(&varTem);
if(varTem.vt==VT_BSTR && varTem.bstrVal!=NULL)
m_strModemName=varTem.bstrVal;
varTem.Clear();
g_spiModemService->get_ModemIMEI(&varTem);
if(varTem.vt==VT_BSTR && varTem.bstrVal!=NULL)
m_strModemIMEI=varTem.bstrVal;
varTem.Clear();
g_spiModemService->get_ModemVersion(&varTem);
if(varTem.vt==VT_BSTR && varTem.bstrVal!=NULL)
m_strModemVersion=varTem.bstrVal;
varTem.Clear();
g_spiModemService->get_ModemModel(&varTem);
if(varTem.vt==VT_BSTR && varTem.bstrVal!=NULL)
m_strModemModel=varTem.bstrVal;
varTem.Clear();
g_spiModemService->GetSMCA(VARIANT_TRUE,&varTem);//获得SIM卡中的短信服务中心号码
if(varTem.vt==VT_BSTR && varTem.bstrVal!=NULL)
m_strSMCA=varTem.bstrVal;
varTem.Clear();
g_spiModemService->get_ModemSignal(&varTem);
varTem.ChangeType(VT_I2);
m_iSignal=varTem.iVal;
varTem.Clear();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -