error C2440: 'static_cast' : 'UINT (__thiscall 클래스명::* )(CPoint)'에서 'LRESULT (__thiscall CWnd::* )(CPoint)'(으)로 변환할 수 없습니다.
 기본 형식에서 파생 형식으로 캐스팅하려면 dynamic_cast 또는 static_cast가 필요합니다.

VS6에서 작업한 MFC 코드를 Visual Studio2008로 변환하여 작업하려고 보면 위와 같은 에러를 토해냅니다.

Visual Studio 2003 이후로 NCHITTEST 선언이 변경되어 발생한 문제입니다.

더이상 VS6에서 작업할 일 없다 싶으신 분들은 Header의 선언부분인 

afx_msg UINT OnNcHitTest(CPoint point);



afx_msg LRESULT OnNcHitTest(CPoint point);

로 변경해주시고, 마찬가지로 cpp 본문 또한 리턴 타입을

UINT 클래스명::OnNcHitTest(CPoint point) {

에서

LRESULT 클래스명::OnNcHitTest(CPoint point) {

로 변경해주시면 됩니다.


VS6와 Visual Studio 2008 양쪽의 호환성을 원하시는 분들은 전처리기를 사용하여 Header는

#if _MSC_VER > 1400

    afx_msg LRESULT  OnNCHitTest(CPoint point);

#else

    afx_msg UINT  OnNCHitTest(CPoint point);

#endif

로 변경하고 cpp는

#if _MSC_VER > 1400

    LRESULT 클래스명::OnNcHitTest(CPoint point) {

#else

    UINT 클래스명::OnNcHitTest(CPoint point) {

#endif

으로 변경해주시면 VS6, Visual Studio 2008 어디서든 에러 없이 사용하실 수 있습니다.

Posted by IdleMage
,