본문 바로가기

Windows/WTL

다중 체인 구조

체인구조에서 동일 메시지 상에서 별도에 메시지 이벤트를 발생하려고 한다면은 다음과 처리하면 된다.

[code]
CHAIN_MSG_MAP_ALT(CBaseMsgWindow, 1)

// base class

class CBaseMsgWindow : public CWindowImpl<CBaseMsgWindow>
{
    // 메세지 맵을 세 개의 부분에 분할
    BEGIN_MSG_MAP(CBaseMsgWindow)
        MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown)
    ALT_MSG_MAP(1)
        MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown2)
    ALT_MSG_MAP(2)
        MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown3)
    END_MSG_MAP()

    LRESULT OnButtonDown(UINT, WPARAM, LPARAM, BOOL&)
    {
        MessageBox(_T("Hello!"));
        return 0;
    }
    
    LRESULT OnButtonDown2(UINT, WPARAM, LPARAM, BOOL&)
    {
        MessageBox(_T("Hello, ATL!"));
        return 0;
    }
    
    LRESULT OnButtonDown3(UINT, WPARAM, LPARAM, BOOL&)
    {
        MessageBox(_T("Hello, ATL/WTL!"));
        return 0;
    }
};
[/code]

[code]
// 상속 클래스 1
class CHelloWindow : public CBaseMsgWindow
{
    BEGIN_MSG_MAP(CHelloWindow)
        ...
        CHAIN_MSG_MAP(CBaseMsgWindow)         // 통상의 체인
    END_MSG_MAP()
};
[/code]

[code]
// 상속 클래스 2
class CHelloWindow2 : public CBaseMsgWindow
{
    BEGIN_MSG_MAP(CHelloWindow2)
        ...
        CHAIN_MSG_MAP_ALT(CBaseMsgWindow, 1) // 대체 메세지 맵에 체인
    END_MSG_MAP()
};
[/code]

'Windows > WTL' 카테고리의 다른 글

WM_CONTEXTMENU  (0) 2013.10.02
MFC 원형 정보  (0) 2013.10.02
체인 구조  (0) 2013.10.02
통지 핸들러 매크로  (0) 2013.10.02
커맨드 핸들러 매크로  (0) 2013.10.02