MFC SendMessage小bug記錄
阿新 • • 發佈:2018-11-09
MFC傳送自定義訊息
dlg.h
afx_msg LRESULT test(WPARAM a, LPARAM b);
dlg.cpp
BEGIN_MESSAGE_MAP(videoDialog, CDialogEx)
ON_WM_SYSCOMMAND()
//自定義訊息
ON_MESSAGE(0x9878, test)
END_MESSAGE_MAP()
LRESULT videoDialog::test(WPARAM a , LPARAM b) { // TODO: 在此新增控制元件通知處理程式程式碼 MessageBox(_T("get test message"), _T("")); return 12138; }
dlg.cpp中觸發或者其他視窗中觸發,SendMessage即可
問題記錄:
SendMessage已經返回,但是響應函式沒任何反應
測試過程:
1.傳送自定以訊息改為傳送WM_SYSCOMMAND,wParam改為原來的訊息值,
void videoDialog::OnSysCommand(UINT nID, LPARAM lParam)
OnSysCommand中可以正常響應,證明系統的傳送訊息機制運轉正常
2.傳送訊息值改為0x9878可以用,證明自定義訊息頁沒異常,
原因,
1.WM_MSG訊息值設定的太大,以前使用過sendMessage,沒出現過問題,所以過於自信,懶得定義WM_USER+1這種巨集,隨便些了一個數值,0x49987,結果數值太大,接收不了
2.ON_MESSAGE(0x9878, test),寫成ON_MESSAGE(0x9878, &videoDialog::test),是仿照按鈕點選事件的方式寫的,VS2017中可以正常執行按鈕點選事件,卻沒有執行我的test函式,可能是好久沒有寫MFC程式的原因,