컴퓨터 공부/MFC 프로그래밍

[5월 14일 1교시] 메세지 맵 1

려리군 2009. 5. 14. 09:47

메세지 맵

MFC는 매크로를 통해서 메세지 맵에 원하는 메세지들이 등록된다.

매크로 내부 구현에는 함수 포인터들을 배열로 가지고 있다.

virtual함수를 이용한다면 윈도우 메세지를 전부 override할 가상함수 테이블이 필요하기 때문에 overhead가 심하다.


OnInitialUpdate

프로그램 시작할 때 한 번만 불려진다.

생성자보다 이 곳에서 view를 초기화 하는 것이 좋다.


virtual CGdiObject* CDC::SelectStockObject(int nIndex);

참고주소 : http://msdn.microsoft.com/en-us/library/aa269282(VS.60).aspx

원하는 stock object를 선택한다. 

nIndex는 다음과 같은 값이 될 수 있다.

BLACH_BRUSH, DKGRAY_BRUSH, GRAY_BRUSH, ...


※ 다음과 같은 방식이 가능하다.

RECT rect = CRect(10,10,100,50);


메세지 맵 수동 추가.

1. 헤더 파일(h)의 DECLARE_MESSAGE_MAP()에 원하는 메세지 함수 제작

예)

DECLARE_MESSAGE_MAP()

afx_msg void onButtonDown();        // 버튼을 클릭했을 때 발생하는 메세지


2. 구현 파일(cpp)의 BEGIN_MESSAGE_MAP과 END_MESSAGE_MAP사이에 다음처럼 추가

ON_BN_CLICKED(아이디, 발생할 이벤트에 대한 함수)

메세지마다 위의 매크로는 다를 수 있다.

예)

BEGIN_MESSAGE_MAP(CMyView, CView)

ON_BN_CLICKED(100,OnButtonDown)

END_MESSAGE_MAP()


3. 해당하는 컨트롤이나 메뉴에서 위의 아이디를 이용한다.

예)

m_pButton.Create(TEXT("Button"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rect,this,100);