📄 maindlg.h
字号:
// MainDlg.h : interface of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////
/*
phone demo,by ril
chenqing@yfgps.com
2008-8-19
*/
#pragma once
#include <ril.h>
#pragma comment(lib,"ril.lib")
class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
public CMessageFilter, public CIdleHandler
{
public:
enum { IDD = IDD_MAINDLG };
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
return CWindow::IsDialogMessage(pMsg);
}
virtual BOOL OnIdle()
{
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CMainDlg)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
MESSAGE_HANDLER(WM_USER+1001,OnSendResult)
MESSAGE_HANDLER(WM_USER+1002,OnMsgIn)
COMMAND_ID_HANDLER(IDC_BUTTON_SEND,OnBtnSend)
END_MSG_MAP()
// Handler prototypes (uncomment arguments if needed):
// LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
// LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
virtual void OnFinalMessage(HWND)
{
DeInitSms();
}
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// center the dialog on the screen
CenterWindow();
// set icons
HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
SetIcon(hIcon, TRUE);
HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
SetIcon(hIconSmall, FALSE);
// register object for message filtering and idle updates
CMessageLoop* pLoop = _Module.GetMessageLoop();
ATLASSERT(pLoop != NULL);
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
UIAddChildWindowContainer(m_hWnd);
m_hrCmdId = -1;
GetDlgItem(IDC_EDIT_NUM).SendMessage(WM_SETTEXT,0,(LPARAM)_T("10086"));
GetDlgItem(IDC_EDIT_SMSC).SendMessage(WM_SETTEXT,0,(LPARAM)_T("+8613800755500"));
GetDlgItem(IDC_EDIT_CONTENT).SendMessage(WM_SETTEXT,0,(LPARAM)_T("ye"));
InitSms();
return TRUE;
}
LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CAboutDlg dlg;
dlg.DoModal();
return 0;
}
LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
// TODO: Add validation code
CloseDialog(wID);
return 0;
}
LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CloseDialog(wID);
return 0;
}
void CloseDialog(int nVal)
{
DestroyWindow();
::PostQuitMessage(nVal);
}
LRESULT OnBtnSend(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
memset(m_tcNumber,0,sizeof(TCHAR)*32);
memset(m_tcContent,0,sizeof(TCHAR)*1024);
GetDlgItem(IDC_EDIT_NUM).SendMessage(WM_GETTEXT,30,(LPARAM)m_tcNumber);
GetDlgItem(IDC_EDIT_SMSC).SendMessage(WM_GETTEXT,30,(LPARAM)m_tcSmsC);
GetDlgItem(IDC_EDIT_CONTENT).SendMessage(WM_GETTEXT,512,(LPARAM)m_tcContent);
if(!*m_tcNumber || !*m_tcContent || !*m_tcSmsC)
return 0L;
_tcscpy(m_stMsgParam.raSvcCtrAddress.wszAddress,m_tcSmsC);
_tcscpy(m_stMsgParam.msgOutSubmit.raDestAddress.wszAddress,m_tcNumber);
m_stMsgParam.msgOutSubmit.rmdDataCoding.dwAlphabet = RIL_DCSALPHABET_UCS2;
m_stMsgParam.msgOutSubmit.cchMsgLength = _tcslen(m_tcContent);
memset(m_stMsgParam.msgOutSubmit.rgbMsg,0,MAXLENGTH_MSG);
__EncodeUCS2(m_tcContent,m_stMsgParam.msgOutSubmit.rgbMsg,MAXLENGTH_MSG);
m_hrCmdId = RIL_SendMsg(m_hRil,&m_stMsgParam,RIL_SENDOPT_NONE);
//::SetEvent(m_hSmsEvent[1]);
return 0L;
}
LRESULT OnSendResult(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
MessageBox(LOWORD(wParam)?_T("Send Msg,Ok"):_T("Send Msg,Error"),_T("Result"),MB_OK);
return 0L;
}
LRESULT OnMsgIn(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
MessageBox(m_tcMsgIn,_T("New Msg"),MB_OK);
return 0L;
}
void InitSms(void)
{
memset(m_tcNumber,0,sizeof(TCHAR)*32);
memset(m_tcSmsC,0,sizeof(TCHAR)*32);
memset(m_tcContent,0,sizeof(TCHAR)*1024);
memset(m_tcMsgIn,0,sizeof(TCHAR)*1024);
HRESULT hr = RIL_Initialize(1,__RILResultCallBack,__RILNotifyCallBack,RIL_NCLASS_ALL,(DWORD)this,&m_hRil);
ATLASSERT(m_hRil);
memset(&m_stMsgParam,0,sizeof(RILMESSAGE));
m_stMsgParam.cbSize = sizeof(RILMESSAGE);
m_stMsgParam.dwParams = RIL_PARAM_M_TYPE | RIL_PARAM_M_SVCCTRADDRESS | RIL_PARAM_M_DESTADDRESS | RIL_PARAM_M_DATACODING |
RIL_PARAM_M_MSG | RIL_PARAM_M_MSGLENGTH | RIL_PARAM_M_PROTOCOLID | RIL_PARAM_M_FLAGS | RIL_PARAM_M_VPFORMAT;
m_stMsgParam.dwType = RIL_MSGTYPE_OUT_SUBMIT;
m_stMsgParam.dwFlags = RIL_MSGFLAG_NONE;
m_stMsgParam.raSvcCtrAddress.cbSize = sizeof(RILADDRESS);
m_stMsgParam.raSvcCtrAddress.dwParams = RIL_PARAM_A_ALL;
m_stMsgParam.raSvcCtrAddress.dwType = RIL_ADDRTYPE_INTERNATIONAL;
m_stMsgParam.raSvcCtrAddress.dwNumPlan = RIL_NUMPLAN_TELEPHONE;
m_stMsgParam.msgOutSubmit.raDestAddress.cbSize = sizeof(RILADDRESS);
m_stMsgParam.msgOutSubmit.raDestAddress.dwParams = RIL_PARAM_A_ALL;
m_stMsgParam.msgOutSubmit.raDestAddress.dwType = RIL_ADDRTYPE_NATIONAL;
m_stMsgParam.msgOutSubmit.raDestAddress.dwNumPlan = RIL_NUMPLAN_TELEPHONE;
m_stMsgParam.msgOutSubmit.rmdDataCoding.cbSize = sizeof(RILMSGDCS);
m_stMsgParam.msgOutSubmit.rmdDataCoding.dwParams = RIL_PARAM_MDCS_TYPE | RIL_PARAM_MDCS_MSGCLASS | RIL_PARAM_MDCS_ALPHABET;
m_stMsgParam.msgOutSubmit.rmdDataCoding.dwType = RIL_DCSTYPE_GENERAL;
m_stMsgParam.msgOutSubmit.rmdDataCoding.dwMsgClass = RIL_DCSMSGCLASS_1;
m_stMsgParam.msgOutSubmit.rmdDataCoding.dwAlphabet = RIL_DCSALPHABET_UCS2;
m_stMsgParam.msgOutSubmit.dwVPFormat = RIL_MSGVP_NONE;
m_stMsgParam.msgOutSubmit.dwProtocolID = RIL_MSGPROTOCOL_SMETOSME;
}
void DeInitSms(void)
{
RIL_Deinitialize(m_hRil);
m_hRil = NULL;
}
static void __RILResultCallBack(DWORD dwCode,HRESULT hrCmdID,const void* lpData,DWORD cbData,DWORD dwParam)
{
CMainDlg* pThis = (CMainDlg*)dwParam;
if(pThis->m_hrCmdId != hrCmdID)
return;
::PostMessage(pThis->m_hWnd,WM_USER+1001,MAKEWPARAM(dwCode==RIL_RESULT_OK? 1:0,0),NULL);
}
static void __RILNotifyCallBack(DWORD dwCode,const void* lpData,DWORD cbData,DWORD dwParam)
{
CMainDlg* pThis = (CMainDlg*)dwParam;
if(dwCode == RIL_NOTIFY_MESSAGE)
{
RILMESSAGE* pRilMsg = (RILMESSAGE*)lpData;
memset(pThis->m_tcMsgIn,0,sizeof(TCHAR)*1024);
TCHAR tcAddr[32];
_tcscpy(tcAddr,pRilMsg->msgInDeliver.raOrigAddress.wszAddress);
TCHAR tcContent[512];
memset(tcContent,0,sizeof(TCHAR)*512);
pThis->__DecodeUCS2(pRilMsg->msgInDeliver.rgbMsg,tcContent,\
pRilMsg->msgInDeliver.cchMsgLength*2,500);
wsprintf(pThis->m_tcMsgIn,_T("Number:%s, Content:%s"),tcAddr,tcContent);
::PostMessage(pThis->m_hWnd,WM_USER+1002,0,NULL);
}
}
BOOL __EncodeUCS2(const TCHAR *pstrSrc,BYTE *pstrDes,int nstrDesSize)
{
int nstrlen = _tcslen(pstrSrc) * sizeof(TCHAR);
if (nstrlen > nstrDesSize)
{
return FALSE;
}
for (int i = 0, j = 0; i < nstrlen; i++)
{
// 先输出高位字节
pstrDes[j++] = pstrSrc[i] >> 8;
// 后输出低位字节
pstrDes[j++] = pstrSrc[i] & 0xff;
}
return TRUE;
}
BOOL __DecodeUCS2(const BYTE *pstrSrc,TCHAR *pstrDes,int nSrcSize,int nDesSize)
{
if (nDesSize*2 < nSrcSize)
{
return FALSE;
}
// 高低字节对调,拼成UNICODE
for (int i = 0; i < nSrcSize/2; i++)
{
pstrDes[i] = *pstrSrc++ << 8;
pstrDes[i] |= *pstrSrc++;
}
return TRUE;
}
TCHAR m_tcMsgIn[1024];
TCHAR m_tcNumber[32];
TCHAR m_tcSmsC[32];
TCHAR m_tcContent[1024];
HRIL m_hRil;
RILMESSAGE m_stMsgParam;
HRESULT m_hrCmdId;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -