1. 程式人生 > >C++:errorC2440訊息相應函式型別不能轉化

C++:errorC2440訊息相應函式型別不能轉化

  1. 問題描述 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)”
  1. 解決方法 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)這樣的格式。