⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maindlg.h

📁 我自己写的用RIL来收发短信的DEMO,VS05,WINCE
💻 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 + -