Проблема с месседж-маппом.
От: Jackson86 Россия  
Дата: 09.08.06 17:05
Оценка:
Здраствуйте.
В очередной раз я напоролся на неразрешимую проблему. Может кто-то подскажет мне, что сделать и этим спасет меня — буду очень благодарен.
Вобщем, вот в чем дело. Дали мне проект пределывать. Был написан изначально на Visual Studio 2002. Открываю я этот проект и пытаюсь собрать на Visual Studio 2005:

Ну вот, собираю я этот проект и вижу ошибку :

error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CFlatHeaderCtrl::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
Cast from base to derived requires dynamic_cast or static_cast

в строке объявления события ON_WM_NCHITTEST в карте сообщений класса CFlatHeaderCtrl:


BEGIN_MESSAGE_MAP(CFlatHeaderCtrl, CHeaderCtrl)
 FX_MSG_MAP(CFlatHeaderCtrl)
                  //{{AFX_MSG_MAP(CFlatHeaderCtrl)
    ON_WM_NCHITTEST()
                  //}}AFX_MSG_MAP
END_MESSAGE_MAP()


Объявление класса и метода:

class CFlatHeaderCtrl : public CHeaderCtrl
{
    DECLARE_DYNCREATE(CFlatHeaderCtrl)
    ... 
   // Generated message map functions
protected:
    //{{AFX_MSG(CFlatHeaderCtrl)
     ...
    afx_msg UINT OnNcHitTest(CPoint point);
                   ...
    //}}AFX_MSG
                   ...
};


Довольно странно, учитывая, что функция OnNcHitTest, унаследованная от CHeaderCtrl возвращает LRESULT.
Поначалу, я попытался решить эту проблему в лоб — просто заменил в объявлении и реализации OnNchitTest возвращаемое значение c UINT на LRESULT. В отместку мне высыпался список из 500-та ошибок.
Но ничего лучшего я не придумал.
В этом коде были замечены и другие странные вещи: переменную, объявленную внутри for(...) продолжали использовать и вне тела цикла!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.