C++:errorC2440訊息相應函式型別不能轉化
阿新 • • 發佈:2018-12-17
- 問題描述 VS編譯提示以下兩個問題:
(1)errorC2440 “static_cast”: 無法從“UINT (__thiscall CSizingControlBar::* )(CPoint)”轉換為“LRESULT (__thiscall CWnd::* )(CPoint)”
(2)errorC2440 “static_cast”: 無法從“LRESULT (__thiscall CTextProgressCtrl::* )(UINT,LPTSTR)”轉換為“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
- 解決方法
error(1)解決方法:
通過提示的訊息找到相應的訊息相應函式,本次出現的問題是CSizingControlBar::OnNcHitTest,由
afx_msg UINT OnNcHitTest(CPoint point); //VC6תVS2017-gxy-20181025
afx_msg LRESULT OnNcHitTest(CPoint point); //VC6תVS2017-gxy-20181025
此外函式定義的地方也要由UINT CSizingControlBar::OnNcHitTest(CPoint point) //VC6轉VS2017-gxy-20181025
改成LRESULT CSizingControlBar::OnNcHitTest(CPoint point) //VC6轉VS2017-gxy-20181025
之所以改返回的資料型別是因為,高版本的VS(好像是從VS2010開始)對訊息的檢查更為嚴格,因此這些在VC6下完全正常執行的訊息對映在VS上編譯不通過。 同樣的error(2)解決也需要將訊息相應函式寫成LRESULT *(WPARAM,LPARAM)這樣的格式。