Àüȸ´ÂATL¿¡ ÀÇÇØ Á¦°øµÇ´Â ¸Þ¼¼Áö ¸ÅÅ©·Î¿¡ ´ëÇØ ¼³¸íÇß½À´Ï´Ù¸¸  WTLµµ ¸Þ¼¼Áö ¸ÅÅ©·Î¸¦ ÁغñÇϰí ÀÖ¾î atlcrack.h Çì´õ·Î Á¤Àǵǰí ÀÖ½À´Ï´Ù.

ATL3.0
±×¸®°íWTLÀÇ ¸Þ¼¼Áö ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ·Á¸é , ¸Þ¼¼Áö ¸ÊÀ» BEGIN_MSG_MAP·ÎºÎÅÍ BEGIN_MSG_MAP_EX·Î º¯°æÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

ATL7.0/7.1
±×¸®°íWTLÀÇ ¸Þ¼¼Áö ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â  CWindowImpl/CDialogImplŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º¿¡¼­´ÂBEGIN_MSG_MAPÀΠä ·Î ÁÁ½À´Ï´Ù¸¸  CWindowImpl/CDialogImplŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º°¡ ¾Æ´Ñ °æ¿ì´Â  BEGIN_MSG_MAP_EXÀ¸·Î º¯°æÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

class CMyWindow : public CWindowImpl<CMyWindow>

{

    // WTLÀÇ ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMyWindow)

        MSG_WM_PAINT(OnPaint)

        MSG_WM_DESTROY(OnDestroy)

    END_MSG_MAP()

 

    void OnPaint(HDC /*hDC*/){

        // WM_PAINT¸Þ¼¼Áö¿¡ÀÇ ÀÀ´ä ó¸®

    }

 

    void OnDestroy(){

        // WM_DESTROY¸Þ¼¼Áö¿¡ÀÇ ÀÀ´ä ó¸®

    }

};

                      


ÀÌ¿Í °°ÀÌWTL¿¡´Â °¢ ¸Þ¼¼Áö Àü¿ëÀÇ ¸Þ¼¼Áö ¸ÅÅ©·Î°¡ ÀÖ¾î  ¸Þ¼¼Áö Çڵ鷯 ÇÔ¼ö¿¡´Â ºÒÇÊ¿äÇÑ Àμö°¡ ¾ø½À´Ï´Ù.

¡¡WTL¿¡´Â ,ATLÀÌ ÁغñÇÏ´Â ¸Þ¼¼Áö Çڵ鷯 ¸ÅÅ©·Î  Ä¿¸àµå Çڵ鷯 ¸ÅÅ©·Î  ÅëÁö Çڵ鷯 ¸ÅÅ©·ÎÀÇ È®ÀåÆÇÀÌ ÁغñµÇ¾î ÀÖ½À´Ï´Ù.



¸Þ¼¼Áö Çڵ鷯 ¸ÅÅ©·Î

¡¡¸Þ¼¼Áö Çڵ鷯 ¸ÅÅ©·Î´Â ¸ðµç ¸Þ¼¼Áö¸¦ ´ë»óÀ¸·Î ÇÕ´Ï´Ù. ¸Þ¼¼Áö Çڵ鷯 ¸ÅÅ©·Î¿¡´Â ´ÙÀ½ÀÇ 2°³°¡ ÀÖ½À´Ï´Ù.

  • MESSAGE_HANDLER_EX(¸Þ¼¼Áö¸í, Çڵ鷯¸í)
    ÁöÁ¤µÈ ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • MESSAGE_RANGE_HANDLER_EX(°³½Ã À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Á¾·á À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Çڵ鷯¸í)
    ¿¬¼ÓÇÑ ¹üÀ§ÀÇ º¹¼öÀÇ ¸Þ¼¼Áö¸¦ Çڵ鷯¿¡ ¸Ê ÇÕ´Ï´Ù.


¸Þ¼¼Áö Çڵ鷯 ÇÔ¼öÀÇ prototype¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam);

                      


uMsg
´Â ¸Þ¼¼Áö¸¦ ½Äº°ÇØ wParam°ú lParam´Â ¸Þ¼¼Áö ÆÄ¶ó¹ÌÅÍÀÔ´Ï´Ù.  ¸Þ¼¼Áö ÆÄ¶ó¹ÌÅÍÀÇ ³»¿ëÀº ¸Þ¼¼ÁöÀÇ Á¾·ù¿¡ ÀÇÇØ ¹Ù²ò´Ï´Ù.



Ä¿¸àµå Çڵ鷯 ¸ÅÅ©·Î

¡¡Ä¿¸àµå Çڵ鷯 ¸ÅÅ©·Î´Â Ä¿¸àµå ¸Þ¼¼Áö(WM_COMMAND) ¸¦ ´ë»óÀ¸·Î ÇÕ´Ï´Ù. Ä¿¸àµå Çڵ鷯 ¸ÅÅ©·Î¿¡´Â ´ÙÀ½ÀÇ 5°³°¡ ÀÖ½À´Ï´Ù.

  • COMMAND_HANDLER_EX(ID, ÅëÁö ÄÚµå, Çڵ鷯¸í)
    ÁöÁ¤µÈ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÁöÁ¤µÈ ÅëÁö Äڵ带 °¡Áö´Â Ä¿¸àµå ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • COMMAND_ID_HANDLER_EX(ID, Çڵ鷯¸í)
    ÁöÁ¤µÈ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÀÓÀÇÀÇ ÅëÁö Äڵ带 °¡Áö´Â Ä¿¸àµå ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • COMMAND_CODE_HANDLER_EX(ÅëÁö ÄÚµå, Çڵ鷯¸í)
    ÀÓÀÇÀÇ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÁöÁ¤µÈ ÅëÁö Äڵ带 °¡Áö´Â Ä¿¸àµå ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • COMMAND_RANGE_HANDLER_EX(°³½Ã À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Á¾·á À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Çڵ鷯¸í)
    ¿¬¼ÓÇÑ ¹üÀ§ÀÇ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ Ä¿¸àµå ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • COMMAND_RANGE_CODE_HANDLER_EX(°³½Ã À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Á¾·á À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, ÅëÁö ÄÚµå, Çڵ鷯¸í)
    ¿¬¼ÓÇÑ ¹üÀ§ÀÇ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÁöÁ¤µÈ ÅëÁö Äڵ带 °¡Áö´Â Ä¿¸àµå ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.


Ä¿¸àµå Çڵ鷯 ÇÔ¼öÀÇ prototype¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

void CommandHandler(UINT uNotifyCode, int nID, HWND hWndCtl);

                      


uNotifyCode
´Â ÅëÁö ÄÚµå nID´Â Ä¿¸àµå¸¦ ¼Û½ÅÇϰí ÀÖ´Â ÄÁÆ®·ÑÀÇ ½Äº°ÀÚ  hWndCtl´Â Ä¿¸àµå¸¦ ¼Û½ÅÇϰí ÀÖ´Â ÄÁÆ®·ÑÀÇ ÇÚµéÀÔ´Ï´Ù.



ÅëÁö Çڵ鷯 ¸ÅÅ©·Î

¡¡ÅëÁö Çڵ鷯 ¸ÅÅ©·Î´Â ÅëÁö ¸Þ¼¼Áö(WM_NOTIFY) ¸¦ ´ë»óÀ¸·Î ÇÕ´Ï´Ù. ÅëÁö Çڵ鷯 ¸ÅÅ©·Î¿¡´Â ´ÙÀ½ÀÇ 5°³°¡ ÀÖ½À´Ï´Ù.

  • NOTIFY_HANDLER_EX(ID, ÅëÁö ÄÚµå, Çڵ鷯¸í)
    ÁöÁ¤µÈ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÁöÁ¤µÈ ÅëÁö Äڵ带 °¡Áö´Â ÅëÁö ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • NOTIFY_ID_HANDLER_EX(ID, Çڵ鷯¸í)
    ÁöÁ¤µÈ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÀÓÀÇÀÇ ÅëÁö Äڵ带 °¡Áö´Â ÅëÁö ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • NOTIFY_CODE_HANDLER_EX(ÅëÁö ÄÚµå, Çڵ鷯¸í)
    ÀÓÀÇÀÇ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÁöÁ¤µÈ ÅëÁö Äڵ带 °¡Áö´Â ÅëÁö ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • NOTIFY_RANGE_HANDLER_EX(°³½Ã À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Á¾·á À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Çڵ鷯¸í)
    ¿¬¼ÓÇÑ ¹üÀ§ÀÇ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÅëÁö ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.

 

  • NOTIFY_RANGE_CODE_HANDLER_EX(°³½Ã À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, Á¾·á À§Ä¡ÀÇ ¸Þ¼¼Áö¸í, ÅëÁö ÄÚµå, Çڵ鷯¸í)
    ¿¬¼ÓÇÑ ¹üÀ§ÀÇ ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ÁöÁ¤µÈ ÅëÁö Äڵ带 °¡Áö´Â ÅëÁö ¸Þ¼¼Áö¸¦ Çڵ鷯 ÇÔ¼ö¿¡ ¸Ê ÇÕ´Ï´Ù.


ÅëÁö Çڵ鷯 ÇÔ¼öÀÇ prototype¸¦ ÀÌÇÏ¿¡ ³ªÅ¸³À´Ï´Ù.

LRESULT NotifyHandler(LPNMHDR pnmh);

                      


pnmh
´ÂNMHDR±¸Á¶Ã¼¿¡ÀÇ Æ÷ÀÎÅÍÀÔ´Ï´Ù.



¸Þ¼¼Áö ó¸®ÀÇ Á¾·á ÅëÁö

¡¡±×·±µ¥ ,ATLÀÇ ¸Þ¼¼Áö ¸ÅÅ©·Î¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â  Çڵ鷯 ÇÔ¼öÀÇ prototype¿¡ 󸮸¦ ³¡³Â´ÂÁö ¾î¶°Çß´ÂÁö¸¦ ÅëÁöÇÏ´Â Ç÷¡±×°¡ ÀÖ¾ú½À´Ï´Ù. ´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀºATLÆÇ ¸Þ¼¼Áö Çڵ鷯 ÇÔ¼öÀÇ prototypeÀÔ´Ï´Ù.

// bHandledÇÏÁö¸¸ 󸮸¦ ³¡³Â´ÂÁö ¾î¶°Çß´ÂÁö¸¦ ÅëÁöÇÏ´Â Ç÷¡±×

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

                      


±×·¯³ª WTLÀÇ ¸Þ¼¼Áö Çڵ鷯 ÇÔ¼ö¿¡´Â ±×·¯ÇÑ Ç÷¡±×°¡ ÁغñµÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù.

±×·±µ¥ WTL¿¡¼­  ¸Þ¼¼Áö Çڵ鷯 ÇÔ¼ö³»¿¡¼­SetMsgHandled() ¶ó°í ÇÏ´Â ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ  ¸Þ¼¼ÁöÀÇ Ã³¸®¸¦ ³¡³Â´ÂÁö ¾î¶°Çß´ÂÁö¸¦ ÅëÁöÇÕ´Ï´Ù.  SetMsgHandled()ÀÇ Àμö¿¡ true¸¦ °Ç³×ÁÖ¾úÀ» °æ¿ì´Â ¸Þ¼¼ÁöÀÇ Ã³¸®¸¦ ³¡³½ °ÍÀ» ÀǹÌÇØ  false¸¦ °Ç³×ÁÖ¾úÀ» °æ¿ì´Â ¸Þ¼¼Áö ¸Ê ³»¿¡¼­ ÇÑÃþ ´õ ÀÌ ¸Þ¼¼Áö¿ëÀÇ Çڵ鷯°¡ ÀÖ´ÂÁö ¾ø´ÂÁö °Ë»öÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.  WTL±×·³ ±âº»ÀûÀ¸·Î ¸Þ¼¼Áö Çڵ鷯 ÇÔ¼öÀÇ È£ÃâÀü¿¡ true°¡ ¼³Á¤µÇ¾î Àֱ⠶§¹®¿¡  ¸Þ¼¼Áö ¸ÊÀ» °Ë»ö½ÃŰ°í ½ÍÀº °æ¿ì¸¸ ¸í½ÃÀûÀ¸·Î false¸¦ ¼³Á¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.