Visual Studio 6.0 코드를 VS2008로 포팅하면서 발생할 수 있는 문제 중 하나....

형변환 캐스팅 관련 문제인데 상위 버전으로 오면서 캐스팅이 더욱 엄격해지면서 발생한는 문제로 사료됨

일단 에러가 발생한 부분

 

 ON_MESSAGE(LOGGING_LIST, LoggingListBox)

 

이곳의 정의가 이렇게 되어 있다.

 

#define ON_MESSAGE(message, memberFxn) \
 { message, 0, 0, 0, AfxSig_lwl, \
  (AFX_PMSG)(AFX_PMSGW) \
  (static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \
  (memberFxn)) },

 

빨간색으로 표시한 저 부분이 문제를 일으키는 부분인데 이전 6.0이전의 버전에서는 메세지 핸들러를 이용해서 변경이 되었으나 2008이상(2005는 사용 안해봐서 잘 모르겠음)부터는 static_cast를 이용해서 변경되면서 이곳이 문제가 된다.

따라서 정의를 수정하지 않고 다음과 같이 수정하면 문제가 해결 가능하다.

 

수정 전 : ON_MESSAGE(LOGGING_LIST, LoggingListBox)

수정 후 : ON_MESSAGE(LOGGING_LIST, (LRESULT(AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))LoggingListBox)

 

 

참고!( LRESULT )

--> long 타입형으로 win32환경에서 메시지 처리를 마친후 OS에게 신호를 주기 위한것으로 사용함

--> 0을 반환시는 메세지 처리를 알아서 할테니 OS는 더이상 신경쓰지마라! (꼭 그렇지는 않지만 대부분)

 

'프로그래밍 > MFC' 카테고리의 다른 글

[MFC 초급] 디지털시계(+예제파일)  (0) 2014.06.15

[MFC 초급] 디지털시계(+예제파일)

프로그래밍/MFC 2014. 6. 15. 01:07 Posted by 카레이서

Practice3_2 워크스페이스 설명- 디지털 시계

 - Miscrosoft Visual C++
- SDI기반

 - 사용 클래스
  BOOL 클래스 사용_MFC 레퍼런스 파일 참조

 - 사용 이벤트 메세지
  WM_TIMER
  WM_RBUTTONDOWN
  WM_LBUTTONDOWN

 - SetTimer() 함수 사용_MFC 레퍼런스 파일 참조
- AfxMessageBox() 사용(메세지 박스)

- BOOL m_bTimerRun 변수 사용(타이머 동작 체크 변수)