C++ 無法從void 轉換爲 LRESULT

“static_cast”: 無法從“void (__thiscall CGraspBmpDlg::* )(WPARAM,LPARAM)”轉換爲“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”

這行出問題
ON_MESSAGE(WM_HOTKEY,OnHotKey)
我都沒看懂……
 
答:
你這個應該是一個MFC程序,ON_MESSAGE是添加消息響應函數,這句話就是添加熱鍵WM_HOTKEY的響應函數。當你註冊了熱鍵之後,當用戶按下熱鍵,會執行OnHotKey函數來處理這個消息。錯誤就應該是OnHotKey這個函數的聲明錯誤了,返回值應該是LRESULT。
 

VS2008對消息的檢查更爲嚴格,以前在VC6下完全正常運行的消息映射在VS2008下編譯不通過

ON_MESSAGE(WM_message,OnMyMessage);
   OnMessage
返回值必須爲LRESULT,其形式爲:afx_msg LRESULT OnMessage(WPARAM, LPARAM);如果不符合,則有錯誤提示:
     error C2440: “static_cast”:
無法從“void (__thiscall CMainFrame::* )(void)”轉換爲“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”

解決方法如下:

首先,把原來的消息函數返回值類型改爲LRESULT,函數內可以隨便寫個return 0;然後消息函數的參數必須改寫成(WPARAM wParam,LPARAM lParam)而不論這兩個參數是否用得到;最後,消息映射如ON_MESSAGE(UM_PROGRESS,&CMainFrame::OnProgress)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章