학교에서 MFC 수업을 들으며 그동안 대충알고 지나쳤던 내용을 차근차근 의미를 되새기고 있답니다.
상속과 오버라이딩이면 충분한데 왜 가상함수 이야기 할 때마다 다형성 이야기를 하실까.. 의아했었죠..
새삼 느끼는 거지만 답을 맞추는 것과 실제 이해해서 코딩 할수 있는 것은 큰 차이가 있는 것 같아요.
가상함수를 정확히 이해하지 못하고 있던 중
오늘 요상한 MFC 예제 하나로 펑~ 이해가 감..
MFC에는 '메세지맵'이라는.. 윈도우메세지 리스트를 나열해 놓은 (특이한 형식의)함수가 하나 있는데 이것을 사용하지 말고 메세지(마우스를 누른다던지 창을 다시그린다던지)를 해 보라는 당황스런 문제가 주어진 것입니다..
이것을 해결하기 위해서는 CWnd클래스에 있는 PreTranslateMessage(MSG* pMsg)를 상속하여 변경(오버라이딩)해야 하는데
상속받아 새로변경시킨 자녀를 실행하기 이전에 부모가 먼저 실행되게 되는데.. 그게 컴파일 순서때문이라고 하더군요.(전문 용어가 있었는데 뭐였더라;;;)
그래서 우선
virtual BOOL PreTranslateMessage(MSG* pMsg);
이 함수를 가상으로 지정을 하면.. 비로소 자녀에게 우선권이 주어지죠..
BOOL CHelloApp(자녀클래스)::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_LBUTTONDOWN){
MessageBox(NULL,"선택하시겠습니까?", "마우스 메시지", MB_OK );
return TRUE;
}
return 0;
}
이렇게 ㅋㅋ 실행해보면
학교에서 얻는 배움 하나하나가 소소한 즐거움을 주는군요 ^ㅡ^
'2_ 바삭바삭 프로그래밍 > C# and Visual C++' 카테고리의 다른 글
MFC - Process에서 메모리 사용량 알아내기 (0) | 2011.04.06 |
---|---|
MFC - 리스트박스 관련, 숫자 문자 상호변환 (0) | 2011.04.06 |
C/C++ 코드를 C# 에서 사용하는 방법(C++/CLI) (3) | 2011.02.23 |
C# - GPS_timer(3) : Client (1) | 2010.07.23 |
C# - GPS_timer(2) : Server (0) | 2010.07.23 |