2009년 03월 30일
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)






☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]