Àüȸ ¼³¸íÇÑ Ã¼Àο¡ ÀÇÇØ  base classÀÇ ¸Þ¼¼Áö ¸ÊÀº º¹¼öÀÇ »ó¼Ó Ŭ·¡½º·ÎºÎÅÍÀÇ ¸Þ¼¼Áö¸¦ ó¸®ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº  »ó¼Ó Ŭ·¡½ºÀÇ À©µµ¿ì»ó¿¡¼­ Ŭ¸¯Çϸé, WM_LBUTTONDOWN ¸Þ¼¼Áö°¡ üÀÎóÀÇ base class¿¡ º¸³»Á® ¸Þ½ÃÁö ¹Ú½º°¡ Ç¥½ÃµÈ´Ù°í ÇÏ´Â ¿¹ÀÔ´Ï´Ù.

// base class

class CBaseMsgWindow : public CWindowImpl<CBaseMsgWindow>

{

    BEGIN_MSG_MAP(CBaseMsgWindow)

        MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown)

    END_MSG_MAP()

 

    LRESULT OnButtonDown(UINT, WPARAM, LPARAM, BOOL&)

    {

        MessageBox(_T("Hello!"));

        return 0;

    }

};

 

// »ó¼Ó Ŭ·¡½º 1

class CHelloWindow : public CBaseMsgWindow

{

    BEGIN_MSG_MAP(CHelloWindow)

        ...

        CHAIN_MSG_MAP(CBaseMsgWindow)  // üÀÎóÀÇ base class¸¦ ÁöÁ¤

    END_MSG_MAP()

};

 

// »ó¼Ó Ŭ·¡½º 2

class CHelloWindow2 : public CBaseMsgWindow

{

    BEGIN_MSG_MAP(CHelloWindow2)

        ...

        CHAIN_MSG_MAP(CBaseMsgWindow)  // üÀÎóÀÇ base class¸¦ ÁöÁ¤

    END_MSG_MAP()

};

                      


ÀÌ ¿¹¿¡¼­´Â  µÎ °³ÀÇ »ó¼Ó Ŭ·¡½º¿Íµµ  °á°úÀûÀ¸·Î °°ÀºOnButtonDown()À̶ó°í ÇÏ´Â ¸Þ¼¼Áö Çڵ鷯¸¦ È£ÃâÇÕ´Ï´Ù.

¡¡±×·±µ¥  »ó±âÀÇ ¹æ¹ý¿¡¼­´Â  »ó¼Ó Ŭ·¡½º¿¡ ÀÇÇØ ´Ù¸¥ ¸Þ¼¼Áö Çڵ鷯¸¦ È£ÃâÇÏ°í ½Í´Ù°í »ý°¢Çϰí À־  ´ç¿¬ÇÕ´Ï´Ù¸¸ ¾ðÁ¦³ª °°ÀºOnButtonDown()¹Û¿¡ ºÒ·Á °¡Áö ¾Ê½À´Ï´Ù. ±×·¯³ª ATLÀÇ ¡¸´ëü ¸Þ¼¼Áö ¸Ê¡¹À» »ç¿ëÇÏ¸é  »ó¼Ó Ŭ·¡½º¿¡ ÀÇÇØ ´Ù¸¥ ¸Þ¼¼Áö Çڵ鷯¸¦ È£ÃâÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù.

´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº  base classÀÇ ¸Þ¼¼Áö ¸ÊÀ» ¼¼ °³ÀÇ ºÎºÐ¿¡ ºÐÇÒÇØ ´ëü ¸Þ¼¼Áö ¸ÊÀ» ÀÛ¼ºÇØ  »ó¼Ó Ŭ·¡½º·ÎºÎÅÍ base classÀÇ ´ëü ¸Þ¼¼Áö ¸Ê¿¡ üÀÎ ÇÑ´Ù°í ÇÏ´Â ¿¹ÀÔ´Ï´Ù. ¸Þ¼¼Áö ¸ÊÀ» ºÐÇÒÇÏ·Á¸é ,ALT_MSG_MAP¸ÅÅ©·Î¸¦ »ç¿ëÇÕ´Ï´Ù.

// 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;

    }

};

 

// »ó¼Ó Ŭ·¡½º 1

class CHelloWindow : public CBaseMsgWindow

{

    BEGIN_MSG_MAP(CHelloWindow)

        ...

        CHAIN_MSG_MAP(CBaseMsgWindow)         // Åë»óÀÇ Ã¼ÀÎ

    END_MSG_MAP()

};

 

// »ó¼Ó Ŭ·¡½º 2

class CHelloWindow2 : public CBaseMsgWindow

{

    BEGIN_MSG_MAP(CHelloWindow2)

        ...

        CHAIN_MSG_MAP_ALT(CBaseMsgWindow, 1)  // ´ëü ¸Þ¼¼Áö ¸Ê¿¡ üÀÎ

    END_MSG_MAP()

};

                      


¡¡ALT_MSG_MAP¸ÅÅ©·Î¿¡´Â ´ëü ¸Þ¼¼Áö ¸ÊÀ» ½Äº°ÇÏ´Â ¹øÈ£¸¦ ÁöÁ¤ÇÕ´Ï´Ù. »ó±âÀÇ ¿¹¿¡¼­´Â  Àü¼ú´ë·Î base classÀÇ ¸Þ¼¼Áö ¸ÊÀ» ALT_MSG_MAP¸ÅÅ©·Î¿¡ ÀÇÇØ ¼¼ °³ÀÇ ºÎºÐ¿¡ ºÐÇÒÇϰí ÀÖ½À´Ï´Ù. ù°´Â µðÆúÆ®ÀÇ ¸Þ¼¼Áö ¸ÊÀ¸·Î, µÑ°´Â ¹øÈ£ 1 ·Î ½Äº°µÇ´Â ´ëü ¸Þ¼¼Áö ¸Ê, ¼Â°´Â ¹øÈ£ 2 ·Î ½Äº°µÇ´Â ´ëü ¸Þ¼¼Áö ¸ÊÀÔ´Ï´Ù. µ¡ºÙ¿© µðÆúÆ®ÀÇ ¸Þ¼¼Áö ¸Ê¿¡´Â ¾Ï¹¬Áß¿¡ 0 ¶ó°í ÇÏ´Â ¹øÈ£¸¦ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.

// ¸Þ¼¼Áö ¸ÊÀ» ¼¼ °³ÀÇ ºÎºÐ¿¡ ºÐÇÒ

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()

                      


¡¡À̰ÍÀ¸·Î base class¿¡ ´ëü ¸Þ¼¼Áö ¸ÊÀ» ÁغñÇÒ ¼ö ÀÖ¾úÀ¸¹Ç·Î  ´ÙÀ½¿¡  »ó¼Ó Ŭ·¡½º·ÎºÎÅÍ ´ëü ¸Þ¼¼Áö ¸Ê¿¡ üÀÎ ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù¸¸ ±×·¯±â À§Çؼ­´Â CHAIN_MSG_MAP_ALT¸ÅÅ©·Î¸¦ »ç¿ëÇÕ´Ï´Ù.  CHAIN_MSG_MAP_ALT¸ÅÅ©·Î¿¡´Â  Ã¼ÀÎóÀÇ Å¬·¡½º¸í°ú ±× Ŭ·¡½º¿¡ ÀÖ´Â ´ëü ¸Þ¼¼Áö ¸ÊÀÇ ¹øÈ£¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

»ó±âÀÇ ¿¹¿¡¼­´Â CHelloWindowŬ·¡½º¿¡¼­´Â CBaseMsgWindowŬ·¡½º¿¡ Åë»óÀÇ Ã¼ÀÎÀ» Çϰí ÀÖÀ» »ÓÀ̹ǷΠCBaseMsgWindowŬ·¡½ºÀÇ µðÆúÆ®ÀÇ ¸Þ¼¼Áö ¸Ê¿¡ ÀÖ´Â OnButtonDown()ÀÌ ºÒ·Á °©´Ï´Ù. CHelloWindow2Ŭ·¡½º¿¡¼­´Â CBaseMsgWindowŬ·¡½ºÀÇ ´ëü ¸Þ¼¼Áö ¸Ê ¹øÈ£ 1 ¿¡ üÀÎ Çϰí Àֱ⠶§¹®¿¡ OnButtonDown2()°¡ ºÒ·Á °©´Ï´Ù.

ATL
´ÂCHAIN_MSG_MAP_ALT()À» Æ÷ÇÔÇØ ´ÙÀ½°ú °°Àº ´ëü ¸Þ¼¼Áö ¸Ê¿ë üÀÎ ¸ÅÅ©·Î¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.