ATL¿¡´Â üÀÎÀ̶ó°í ÇÏ´Â ±¸Á¶°¡ ÀÖ½À´Ï´Ù. À̰ÍÀº  ¸Þ¼¼Áö ¸ÊÀ» ´Ù¸¥ ¸Þ¼¼Áö ¸Ê°ú ¿¬°áÇÏ´Â ±¸Á¶ÀÔ´Ï´Ù. ¿Ö ÀÌ·¯ÇÑ ±¸Á¶°¡ ÇÊ¿äÇѰ¡¸¦ ÀÌÇÏÀÇ ÇÁ·Î±×·¥ÆíÀ» ¿¹·Î ¼³¸íÇÕ´Ï´Ù.

// base class

class CBaseWindow : public CWindowImpl<CBaseWindow>

{

    BEGIN_MSG_MAP(CBaseWindow)

        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)

    END_MSG_MAP()

 

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

    {

        PostQuitMessage(0);

        return 0;

    }

};

 

// »ó¼Ó Ŭ·¡½º

class CMessageWindow : public CBaseWindow

{

    BEGIN_MSG_MAP(CMessageWindow)

        MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown)

    END_MSG_MAP()

 

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

    {

        MessageBox(_T("Hello!"));

        return 0;

    }

};

                      


¡¡»ó±âÀÇ ÇÁ·Î±×·¥ÆíÀº , À©µµ¿ì¸¦ Á¾·áÇÏ´Â Çڵ鷯¸¸À» °¡Áø base class(CBaseWindow) ¿Í ±× Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýÇÑ Å¬·¡½º(CMessageWindow) ÀÇ Á¤ÀÇÀÔ´Ï´Ù. »ó¼Ó Ŭ·¡½º¿¡¼­´Â  ¿ÞÂÊ mouse button¸¦ ´­·¶À» ¶§¿¡ "Hello!" ¶ó°í ÇÏ´Â ¸Þ½ÃÁö ¹Ú½º¸¦ Ç¥½ÃÇϵµ·Ï Çϰí ÀÖ½À´Ï´Ù.

¡¡¿©±â¼­  »ó¼Ó Ŭ·¡½ºÀÎCMessageWindowŬ·¡½º·ÎºÎÅÍ À©µµ¿ì¸¦ ÀÛ¼ºÇØ Ç¥½ÃÇß´Ù°í ÇØµµ  ÀÌ À©µµ¿ì´Â Á¾·áÇÒ ¼ö ¾ø½À´Ï´Ù. Áï , ÀÌ À©µµ¿ì¿¡WM_DESTROY¸Þ¼¼Áö°¡ º¸³»Á®µµ , ÀÚµ¿ÀûÀ¸·Î base class¿¡´Â º¸³»ÁöÁö ¾Ê°í , base classÀÇ °ÍOnDestroy()Àº ºÒ·Á °¡Áö ¾Ê½À´Ï´Ù.

¡¡ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â °ÍÀÌ Ã¼ÀÎÀ̶ó°í ÇÏ´Â ±¸Á¶ÀÔ´Ï´Ù. Áï , »ó¼Ó Ŭ·¡½ºÀÇ ¸Þ¼¼Áö ¸Ê°ú base classÀÇ ¸Þ¼¼Áö ¸ÊÀ» ¿¬°áÇØ  »ó¼Ó Ŭ·¡½º·Î ¸Þ¼¼Áö Çڵ鷯°¡ ¹ß°ßµÇÁö ¾Ê´Â °æ¿ì´Â base classÀÇ ¸Þ¼¼Áö ¸ÊÀ» °Ë»öÇϵµ·Ï º¯°æÇÕ´Ï´Ù. À̰ÍÀº  ±âº» Ŭ·¡½º¿¡ÀÇ Ã¼ÀÎÀ̶ó°í ºÒ¸³´Ï´Ù. ±âº» Ŭ·¡½º¿¡ÀÇ Ã¼ÀÎÀ» ½ÇÇöÇϱâ À§Çؼ­´Â  »ó¼Ó Ŭ·¡½ºÀÇ ¸Þ¼¼Áö ¸Ê³»¿¡¼­ CHAIN_MSG_MAP¸ÅÅ©·Î¸¦ »ç¿ëÇÕ´Ï´Ù.

BEGIN_MSG_MAP(CMessageWindow)

    MESSAGE_HANDLER(WM_LBUTTONDOWN, OnButtonDown)

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

END_MSG_MAP()

                      


¡¡ÀÌ¿Í °°ÀÌ ATL±×·³  »ó¼Ó Ŭ·¡½º¿¡ ÇØ´çÇÏ´Â ¸Þ¼¼Áö Çڵ鷯°¡ ¾øÀ» ¶§  ¸Þ¼¼Áö°¡ ÀÚµ¿ÀûÀ¸·Î base class¿¡ º¸³»Áú °ÍÀº ¾ø½À´Ï´Ù. À̰ÍÀº ATLÀÇ ¾ÆÅ°ÅØÃİ¡ ´ÙÁß »ó¼ÓÀ» ±â¹ÝÀ¸·Î Çϰí Àֱ⠶§¹®ÀÔ´Ï´Ù. ´ÙÁß »ó¼Ó¿¡¼­´Â base class°¡ º¹¼ö Á¸ÀçÇϱâ À§ÇØ ¾î´À base classÀÇ ¸Þ¼¼Áö ¸Ê¿¡ ¸Þ¼¼Áö¸¦ º¸³¾±î¸¦  Ã¼Àο¡ ÀÇÇØ ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾È µË´Ï´Ù.

ATL(
Àº)´ÂCHAIN_MSG_MAP()À» Æ÷ÇÔÇØ ´ÙÀ½°ú °°Àº üÀÎ ¸ÅÅ©·Î¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.

  • CHAIN_MSG_MAP(Ŭ·¡½º¸í)
    ÁöÁ¤µÈ Ŭ·¡½ºÀÇ ¸Þ¼¼Áö ¸Ê¿¡ üÀÎ ÇÕ´Ï´Ù.

 

CHAIN_MSG_MAP_MEMBER(ÀνºÅϽº¸í)
ÁöÁ¤µÈ ÀνºÅϽºÀÇ ¸Þ¼¼Áö ¸Ê¿¡ üÀÎ ÇÕ´Ï´Ù.