WINDOWS應用程序(GUI程序)是基於消息的事件驅動方式運行,外部的事件:鼠標、鍵盤的點擊,都會轉化成消息,並被投擲於應用程序的消息隊列中,應用程序的消息引擎從隊列中獲取消息,並進行處理(WindProc)。函數
此處演示的一個消息裏就是,如何向窗體發送消息,並進行處理設計
分別利用API sendMessage, PostMessage,向窗口發送消息,並進行處理code
(一)自定義消息類型隊列
//自定義消息 #define WM_USER_SEND_MSG (WM_USER + 101) #define WM_USER_POST_MSG (WM_USER + 102)
(二)設計消息的響應函數:
在類MsgTestDlg中添加響應函數的聲明和定義:
聲明:事件
afx_msg void OnBnClickedButtonSendMsg(); afx_msg void OnBnClickedButtonPostMsg();
定義:
LRESULT CMsgTestDlg::HandleSendMsg(WPARAM wParam, LPARAM lParam) { AfxMessageBox("CMsgTestDlg::SendMsg"); return 0; } LRESULT CMsgTestDlg::HandlePostMsg(WPARAM wParam, LPARAM lParam) { AfxMessageBox("CMsgTestDlg::PostMsg"); return 0; }
(三)在消息映射表的宏定義出,添加自定義消息和處理函數的映射關係:get
BEGIN_MESSAGE_MAP(CMsgTestDlg, CDialog) ...... ON_MESSAGE(WM_USER_SEND_MSG, &CMsgTestDlg::HandleSendMsg) ON_MESSAGE(WM_USER_POST_MSG, &CMsgTestDlg::HandlePostMsg) ...... //}}AFX_MSG_MAP END_MESSAGE_MAP()
::SendMessage(m_hWnd, WM_USER_SEND_MSG, NULL, NULL);
向窗體發送消息WM_USER_SEND_MSG,消息引擎在獲取到該消息後,從消息映射表中提取處理該消息的方法:CMsgTestDlg::HandleSendMsg,sendMessage函數在HandleSendMsg方法運行結束後才返回,不然阻塞
博客
4.2. 點擊BUTTON:POSTMSG,作以下工做:
消息隊列
::PostMessage(m_hWnd, WM_USER_POST_MSG, NULL, NULL);
向消息隊列中發送消息後,當即返回,至於消息處理,不關個人事哈~界面與上圖相似,就不上傳