在對接手寫板處理手寫板的消息時遇到的問題記錄如下:
MFC處理自定義消息的邏輯:
第一步:聲明自定義消息
#define WM_MYMSG WM_USER + 200 //WM_USER爲系統定義好的值爲0x0400
第二步:在類聲明中聲明消息映射
DECLARE_MESSAGE_MAP()
第三步:在類聲明中聲明消息處理函數
例如:afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM);
第四步:要實現消息映射
BEGIN_MESSAGE_MAP()
ON_MESSAGE(WM_MYMSG,OnMyMsgHandler)
END_MESSAGE_MAP()
第五步:實現消息處理函數
LRESULT CMainFrame::OnMyMsgHandler(WPARAM w,LPARAM l)
{
AfxMessageBox("Hello,World!");
return 0;
}
C#處理自定義消息的邏輯:
第一步:自定義消息
const int WM_MYMSG = 0x0400 + 200
第二步:重載消息處理函數
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
}
第三步:在消息處理函數中,處理自定義消息
protected override void WndProc(ref Message m)
{
if(m.msg == WM_MYMSG)
{
console.WriteLine("catch mymsg!");
}
base.WndProc(ref m);
}
心得: MFC處理自定義時,首先需要將消息和消息處理函數綁定,當自定義消息過來時。有MFC調用消息處理函數。
C#則需要自己在消息循環中取獲取自定義消息再處理。