VS6.0 -> VS2005 ON_WM_NCHITTEST 에러

어떤 프로그램을 만들기위해 선배가 샘플로 프로그램 하나를 보내주었는데....

VS6.0 에서 개발된 녀석이라 VS2005로 변환해야하는 일이 생겼었다...

아무 생각없이 변환 Y 누르고 빌드 와 동시에 뿜어져 나오는에러

error C2440:
'static_cast' : 'UINT (__thiscall CSizingControlBarG::* )(CPoint)'에서
'LRESULT (__thiscall CWnd::* )(CPoint)'(으)로 변환할 수 없습니다.
 


해결해볼려고 머리를 싸매고 구글링을 하던도중 깨달음을 얻게 됨 ㅇㅅㅇ)


VS 6.0 에서 작성한 코드에 NcHitTest가 포함되어있다면 위와같이 C2440에러가 발생하게 되는데
이때 해결법은 해당 소스파일의 헤더와 CPP에 수정을 가해서 컴파일을 하면 문제 해결!
(일단 문제 발생원인은 NcHitTest 가 VS2003에서부터 선언이 바뀌었기 때문)

= Header File =

//afx_msg UINT OnNcHitTest(CPoint point);
afx_msg LRESULT OnNcHitTest(CPoint point);

위와같이 afx_msg UINT OnNcHitTest(CPoint point); 를
             afx_msg LRESULT OnNcHitTest(CPoint point); 로 바꾸어주세용

만일 2005에서 6.0 사이를 왔다갔다 할려면 아래와같이 if로 구분지으면 되겠습니다.
#if _MSC_VER>=1400
afx_msg LRESULT OnNcHitTest(CPoint point);
#else
afx_msg UINT OnNcHitTest(CPoint point)
#endif


= CPP File =

OnNcHitTest(CPoint point)를 상속받는 녀석을 수정하면 됩니다.

//UINT CSizingControlBarG::OnNcHitTest(CPoint point)
LRESULT CSizingControlBarG::OnNcHitTest(CPoint point)
{
    //함수본문코드
}

위와같이 변경하면 됩니다...

VS2005와 6.0 사이를 왔다갔다 하실경우에는 헤더파일과 마찬가지로
#if ~ #else ~ #endif 처리를 해주시면 됩니다


참 쉽죠잉~

by 봉달이 | 2009/03/30 10:04 | 프로그래밍이야기 | 트랙백 | 덧글(1)

트랙백 주소 : http://mrBongDal.egloos.com/tb/1888325
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by Mel.D at 2009/04/03 22:35
봉기안늉

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶