¸Þ½ÃÁö ¸Ê, Çڵ鷯, ¸ÅÅ©·ÎÀÇ °ü°è

 

Âü°í¹®Çå : 1. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î (1997³â 1¿ùÈ£) MFCÀÇ ¸Þ½ÃÁö ó¸®, ¸ÅÅ©·Î°¡ ÇØ°áÇÑ´Ù

                2. Visual C++ 6 ¿Ïº®°¡À̵å (¿µÁøÃâÆÇ»ç, p157~170)

 

  ¸Þ½ÃÁö¸ÊÀº ÀÏÁ¾ÀÇ ¸ÅÅ©·ÎÀε¥, ÆÄ»ýŬ·¡½ºÀÇ ¸Þ½ÃÁö Çڵ鷯 ÇÔ¼ö¸¦ ¿©±â¿¡ µî·ÏÇÏ¸é ±â¹Ý Ŭ·¡½ºÀÇ ÇÔ¼ö¸¦ ¹«½ÃÇÏ°í, ÆÄ»ýŬ·¡½ºÀÇ ÇÔ¼ö¸¦ È£ÃâÇØ ÁÝ´Ï´Ù. Áï ¸Þ½ÃÁö¸Ê¿¡ µî·ÏµÈ ÇÔ¼ö¿¡ ´ëÇؼ­¸¸ °¡»óÇÔ¼öó·³ ¹ÙÀεùÀ» ÇØÁÖ´Â °ÍÀÔ´Ï´Ù.

 ±×¸®°í ¸Þ½ÃÁö¸ÊÀº BEGIN_MESSAGE_MAP À̶ó´Â ¸ÅÅ©·Î·Î ½ÃÀÛÇؼ­, END_MESSAGE_MAP À̶ó´Â ¸ÅÅ©·Î·Î ³¡³³´Ï´Ù. Âü°í·Î ¾Ë¾Æº¸ÀÚ¸é ÀÌ ¸ÅÅ©·Î´Â afxwin.h ÆÄÀÏ¿¡ ´ÙÀ½Ã³·³ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ²Ï º¹ÀâÇϳ׿ä.

#ifdef _AFXDLL
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
        const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
                { return &baseClass::messageMap; } \
        const AFX_MSGMAP* theClass::GetMessageMap() const \
                { return &theClass::messageMap; } \
        AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
        { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
        AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
        { \

#else
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
        const AFX_MSGMAP* theClass::GetMessageMap() const \
                { return &theClass::messageMap; } \
        AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
        { &baseClass::messageMap, &theClass::_messageEntries[0] }; \
        AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
        { \

#endif

#define END_MESSAGE_MAP() \
                {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
        }; \

 

º¹ÀâÇÑ ÀÌ·ÐÀº ³öµÎ±â·Î ÇÏ°í, ½ÇÁ¦ Äڵ带 º¸¸é¼­ ¼³¸íÀ» ÇÏÁÒ.

1. ´ÙÀ̾ó·Î±× º£À̽º·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µì´Ï´Ù. ´ÙÀ½Àº ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç ÈÄ ¾Æ¹«·± ÀÛ¾÷À» ÇÏÁö ¾ÊÀº Ãʱâ»óÅÂÀÇ ´ÙÀ̾ó·Î±×ÀÇ Çì´õÆÄÀÏ ÀϺÎÀÔ´Ï´Ù.

...................................

// Dialog Data
        //{{AFX_DATA(CMessageMapDlg)
        enum { IDD = IDD_MESSAGEMAP_DIALOG };
                // NOTE: the ClassWizard will add data members here
        //}}AFX_DATA

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CMessageMapDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);        // DDX/DDV support
        //}}AFX_VIRTUAL

// Implementation
protected:
        HICON m_hIcon;

        // Generated message map functions
        //{{AFX_MSG(CMessageMapDlg)
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

........................................................

 

2. ´ÙÀ½Àº ¿ª½Ã Ãʱâ»óÅÂÀÇ cpp ÆÄÀÏÀÇ ÀϺÎÀÔ´Ï´Ù.

...............................................

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CAboutDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL

// Implementation
protected:
        //{{AFX_MSG(CAboutDlg)
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
        //{{AFX_DATA_INIT(CAboutDlg)
        //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CAboutDlg)
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
        //{{AFX_MSG_MAP(CAboutDlg)
                // No message handlers
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMessageMapDlg dialog

CMessageMapDlg::CMessageMapDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CMessageMapDlg::IDD, pParent)
{
        ...........................................
}

void CMessageMapDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CMessageMapDlg)
                // NOTE: the ClassWizard will add DDX and DDV calls here
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMessageMapDlg, CDialog)
        //{{AFX_MSG_MAP(CMessageMapDlg)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMessageMapDlg message handlers

.......................................

 

3. ´ÙÀ̾ó·Î±× ÅÛÇø´¿¡ ¹öÆ°À» 5°³ ¸¸µç ÈÄ, °¢°¢ÀÇ ¹öÆ°¿¡ ´ëÇØ Çڵ鷯¸¦ ¸¸µì´Ï´Ù.

´ÙÀ½Àº ±× ÈÄÀÇ Çì´õÆÄÀÏÀÔ´Ï´Ù. È­»ìÇ¥ ºÎºÐÀÌ ¹Ù²ï ºÎºÐÀÔ´Ï´Ù.

 

// Dialog Data
        //{{AFX_DATA(CMessageMapDlg)
        enum { IDD = IDD_MESSAGEMAP_DIALOG };
                // NOTE: the ClassWizard will add data members here
        //}}AFX_DATA

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CMessageMapDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);        // DDX/DDV support
        //}}AFX_VIRTUAL

// Implementation
protected:
        HICON m_hIcon;

        // Generated message map functions
        //{{AFX_MSG(CMessageMapDlg)
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        afx_msg void OnButton1();    // <-----
        afx_msg void OnButton2();    // <-----
        afx_msg void OnButton3();    // <-----
        afx_msg void OnButton4();    // <-----
        afx_msg void OnButton5();    // <-----
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

 

4. cpp ÆÄÀÏÀÔ´Ï´Ù. ¿ª½Ã ¿©±âµµ ¹Ù²ï ºÎºÐÀ» È­»ìÇ¥·Î Ç¥½ÃÇß½À´Ï´Ù.

 

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CAboutDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL

// Implementation
protected:
        //{{AFX_MSG(CAboutDlg)
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
        //{{AFX_DATA_INIT(CAboutDlg)
        //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CAboutDlg)
        //}}AFX_DATA_MAP
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
        //{{AFX_MSG_MAP(CAboutDlg)
                // No message handlers
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMessageMapDlg dialog
 
CMessageMapDlg::CMessageMapDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CMessageMapDlg::IDD, pParent)
{
       ....................................................
}

void CMessageMapDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);

        //{{AFX_DATA_MAP(CMessageMapDlg)
                // NOTE: the ClassWizard will add DDX and DDV calls here
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMessageMapDlg, CDialog)
        //{{AFX_MSG_MAP(CMessageMapDlg)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON1, OnButton1)   // <-----
        ON_BN_CLICKED(IDC_BUTTON2, OnButton2)   // <-----
        ON_BN_CLICKED(IDC_BUTTON3, OnButton3)   // <-----
        ON_BN_CLICKED(IDC_BUTTON4, OnButton4)   // <-----
        ON_BN_CLICKED(IDC_BUTTON5, OnButton5)   // <-----
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMessageMapDlg message handlers

void CMessageMapDlg::OnButton1()
{
        // TODO: Add your control notification handler code here
}

void CMessageMapDlg::OnButton2()
{
        // TODO: Add your control notification handler code here
}

void CMessageMapDlg::OnButton3()
{
        // TODO: Add your control notification handler code here
}

void CMessageMapDlg::OnButton4()
{
        // TODO: Add your control notification handler code here
}

void CMessageMapDlg::OnButton5()
{
        // TODO: Add your control notification handler code here
}

 

5. À§¿¡¼­ ¹öÆ° 5°³¸¦ Ãß°¡ÇÑ ´ÙÀ½¿¡ Çì´õÆÄÀÏÀÇ ¹Ù²ï ºÎºÐÀ» »ìÆ캸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

 Çì´õÆÄÀÏÀÇ °æ¿ì, Çڵ鷯 ÇÔ¼öÀÇ ¼±¾ðÀÌ Æ÷ÇԵ˴ϴÙ. ´ÙÀ½Ã³·³ ¸»ÀÌÁÒ.

        afx_msg void OnButton1();    
        afx_msg void OnButton2();    
        afx_msg void OnButton3();    
        afx_msg void OnButton4();   
        afx_msg void OnButton5();   

¿©±â¼­ º¸¸é ÇÔ¼öÀÇ ¾ÕºÎºÐ¿¡ afx_msg ¶ó´Â °ÍÀÌ º¸ÀÌÁÒ. ÀÌ°Ç afxwin.h ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ define µÇ¾î ÀÖ½À´Ï´Ù.

   #ifndef afx_msg
   #define afx_msg         // intentional placeholder
   #endif

 define ¹®ÀÌ Àü°³µÇ¾î Äڵ尡 ġȯµÇ¸é ±×³É ¾ø¾îÁý´Ï´Ù. Àִ°ųª ¾ø´Â°Å³ª ¸¶Âù°¡Áö¶ó´Â ¸»ÀÌÁÒ. »ç½Ç ¾ÈºÙ¿©µµ »ó°ü¾øÁö¸¸ Çڵ鷯 ÇÔ¼ö¶ó´Â °ÍÀ» Ç¥½ÃÇϱâ À§ÇÑ °Ì´Ï´Ù.

 

6. CPPÆÄÀÏÀÇ Ãß°¡µÈ ºÎºÐÀº ´ÙÀ½°ú °°½À´Ï´Ù. ´ÙÀ½°ú °°Àº ¸ÅÅ©·Î ¿Ü¿¡µµ ³»¿ëÀÌ ¾ø´Â Çڵ鷯 ÇÔ¼ö°¡ Ãß°¡µË´Ï´Ù. Çڵ鷯 ÇÔ¼öÀÇ ³»¿ëÀº ÇÁ·Î±×·¡¸Ó°¡ Á÷Á¢ ä¿ö¾ß ÇÏ°ÚÁÒ.

        ON_BN_CLICKED(IDC_BUTTON1, OnButton1)   
        ON_BN_CLICKED(IDC_BUTTON2, OnButton2)   
        ON_BN_CLICKED(IDC_BUTTON3, OnButton3)   
        ON_BN_CLICKED(IDC_BUTTON4, OnButton4)  
        ON_BN_CLICKED(IDC_BUTTON5, OnButton5)  

 ÀÌ ºÎºÐÀº ¹öÆ°ÀÇ ID¿Í Çڵ鷯 ÇÔ¼ö¸¦ ¿¬°á½ÃÅ°´Â ¸ÅÅ©·ÎÀÔ´Ï´Ù. ON_BN_CLICKED ºÎºÐÀÌ ¸ÅÅ©·Î±¸¿ä, IDC_BUTTON1 ºÎºÐÀº ¹öÆ°ÀÇ ID , OnButton1Àº ±× ¹öÆ°¿¡ ´ëÇÑ Çڵ鷯 ÇÔ¼öÀÌÁÒ. ¹öÆ°À» 5°³ ³õ¾ÒÀ¸¹Ç·Î ¿¬°á½ÃÅ°´Â ¸ÅÅ©·Î ºÎºÐÀÌ 5°³°¡ µË´Ï´Ù.

 

7. ¸¸¾à ¹öÆ°ÀÌ 100°³¶ó¸é À§¿Í °°Àº ¸ÅÅ©·Î°¡ 100°³°¡ ¸¸µé¾îÁ®¾ß ÇÏ°í, ±×¿¡ µû¶ó Çڵ鷯 ÇÔ¼öµµ 100°³°¡ ¸¸µé¾îÁö°ÚÁÒ. »ó´çÇÑ ³ë°¡´Ù°¡ ¾Æ´Ò ¼ö ¾ø½À´Ï´Ù. ÀÌ°É Á»´õ ´Ü¼øÇÏ°Ô ÁÙÀ̱â À§Çؼ­ ´Ù¸¥ ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. ON_CONTROL_EX ³ª ON_CONTROL_RANGE °°Àº ¸ÅÅ©·Î ¸»ÀÌÁÒ.

 ÀÌ°Í¿¡ ´ëÇØ ¾Ë¾Æº¸±â Àü¿¡ ´ÙÀ½³»¿ëºÎÅÍ ¸ÕÀú ¾Ë¾Æº¸±â·Î ÇÏÁÒ. ´ÙÀ½ ¹æ¹ýÀ» »ç¿ëÇؼ­ ¿©·¯°³ÀÇ Çڵ鷯 ÇÔ¼ö¸¦ Çϳª·Î ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.

                            ---- X ---- X ---- X ----

7.1 ON_BN_CLICKED  ¸ÅÅ©·Î´Â afxmsg_.h ÆÄÀÏÀ» º¸¸é ´ÙÀ½Ã³·³ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

     #define ON_BN_CLICKED(id, memberFxn) \
             ON_CONTROL(BN_CLICKED, id, memberFxn)

 ON_BN_CLICKED ÀÇ °æ¿ì ON_CONTROLÀÇ ´Ù¸¥ À̸§ÀÌÁÒ. ÀÌ ¸ÅÅ©·ÎÀÇ È®ÀåÆÇÀ¸·Î ON_CONTROL_EX ¿Í ON_CONTROL_RANGE ¶ó´Â°Ô ÀÖ½À´Ï´Ù.

 ON_CONTROL_EX ´Â »ç½Ç MFC¿¡¼­ Á¦°øµÇÁö ¾Ê´Â °Çµ¥¿ä. ¾øÀ¸¸é ¸¸µé¸é µË´Ï´Ù. ´ÙÀ½Ã³·³ ¸»ÀÌÁÒ.

   #define ON_CONTROL_EX(wNotifyCode, id, memberFxn)    \
      { WM_COMMAND, (WORD)wNotifyCode, (WORD)id, (WORD)id, AfxSig_bw,   \
       (AFX_PMSG)(BOOL (AFX_MSG_CALL CCmdTarget::*)(UINT))&memberFxn },

 ÀÌ ¸ÅÅ©·Î´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

cpp ÆÄÀÏ¿¡¼­ ON_BN_CLICKED ºÎºÐÀ» ON_CONTROL_EX ¸ÅÅ©·Î·Î ¹Ù²Ù¾îº¸ÁÒ.

¸ÅÅ©·Î¸Ê ºÎºÐÀ» ´ÙÀ½Ã³·³ ¹Ù²Ù¸é µË´Ï´Ù.

 

BEGIN_MESSAGE_MAP(CMessageMapDlg, CDialog)
        //{{AFX_MSG_MAP(CMessageMapDlg)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()

//      ON_BN_CLICKED(IDC_BUTTON1, OnButton1)     // <--- ¿ø·¡ÀÇ ¸ÅÅ©·Î
//      ON_BN_CLICKED(IDC_BUTTON2, OnButton2)     // <--- ¿ø·¡ÀÇ ¸ÅÅ©·Î
//      ON_BN_CLICKED(IDC_BUTTON3, OnButton3)     // <--- ¿ø·¡ÀÇ ¸ÅÅ©·Î
//      ON_BN_CLICKED(IDC_BUTTON4, OnButton4)    // <--- ¿ø·¡ÀÇ ¸ÅÅ©·Î
//      ON_BN_CLICKED(IDC_BUTTON5, OnButton5)    // <--- ¿ø·¡ÀÇ ¸ÅÅ©·Î

        //}}AFX_MSG_MAP

        ON_CONTROL_EX(BN_CLICKED, IDC_BUTTON1, OnButton1)  // <--- ¹Ù²ï ¸ÅÅ©·Î
        ON_CONTROL_EX(BN_CLICKED, IDC_BUTTON2, OnButton1)  // <--- ¹Ù²ï ¸ÅÅ©·Î
        ON_CONTROL_EX(BN_CLICKED, IDC_BUTTON3, OnButton1)  // <--- ¹Ù²ï ¸ÅÅ©·Î
        ON_CONTROL_EX(BN_CLICKED, IDC_BUTTON4, OnButton1)  // <--- ¹Ù²ï ¸ÅÅ©·Î
        ON_CONTROL_EX(BN_CLICKED, IDC_BUTTON5, OnButton1)  // <--- ¹Ù²ï ¸ÅÅ©·Î

END_MESSAGE_MAP()

 

 7.2 ¿©±â¼­ ¹Ù²ï ºÎºÐÀÌ ¹«¾ðÁö ÀÌÇØ°¡ µÇ³ª¿ä?

¹Ù·Î Çڵ鷯 ÇÔ¼ö°¡ Çϳª·Î ÁÙ¾ú´Ù´Â °Ì´Ï´Ù. ¿ø·¡ÀÇ ¸ÅÅ©·Î¸¦ »ç¿ëÇß´Ù¸é ¹öÆ° 5°³¿¡ ´ëÇØ °¢°¢ Çϳª¾¿, 5°³ÀÇ Çڵ鷯 ÇÔ¼ö°¡ »ç¿ëµÇ¾úÁö¸¸, ¹Ù²ï ¸ÅÅ©·Î¸¦ »ç¿ëÇÑ ÈÄ Çڵ鷯 ÇÔ¼ö°¡ Çϳª·Î ÁÙ¾ú½À´Ï´Ù.

 ÀÌ °æ¿ì ¹®Á¦°¡ Çϳª ¹ß»ýÇÏ°ÚÁÒ. ¹Ù·Î ¾î´À ¹öÆ°ÀÌ ´­·È´ÂÁö(Áï ´­¸° ¹öÆ°ÀÇ ID °¡ ¹«¾ùÀÎÁö) È®ÀÎÇÒ ¹æ¹ýÀÌ ¾ø´Ù´Â °ÅÁÒ. ÀÌ ¹®Á¦´Â ´ÙÀ½°ú °°ÀÌ ÇØ°áÇÏ¸é µË´Ï´Ù.

Çڵ鷯 ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ±¸¼ºÇÕ´Ï´Ù.

 

void CMessageMapDlg::OnButton1()
{
     const MSG *pMsg = GetCurrentMessage();

     // WM_COMMAND¿¡¼­´Â wParamÀÌ ÄÁÆ®·ÑÀÇ ID
     switch(pMsg->wParam) {
          .....
      }
}

 ÀÌ·¸°Ô Çؼ­ À§ÀÇ ¹®Á¦´Â ÇØ°áµÇ¾ú½À´Ï´Ù.

 

7.3 ±×¸®°í ÇÑ°¡Áö ´õ ÁÖ¸ñÇÒ °Ô ÀÖ½À´Ï´Ù. ¸ÅÅ©·Î°¡ µé¾î°¡´Â À§Ä¡Àä. ¸Þ½ÃÁö ¸ÊÀº ´ÙÀ½ µÎ ¹®Àå »çÀÌ¿¡ µé¾î°©´Ï´Ù. Ŭ·¡½ºÀ§Àúµå°¡ ¸¸µç °Í°ú »ç¿ëÀÚ°¡ ¸¸µç °Í ¸ðµÎ ¸»ÀÌÁÒ.

BEGIN_MESSAGE_MAP(CMessageMapDlg, CDialog)
...
END_MESSAGE_MAP()

±×·±µ¥, ÀÌ µÎ ¹®Àå ¾È¿¡ ¶Ç ´Ù¸¥ ¹®ÀåÀÌ ÀÖ½À´Ï´Ù.

        //{{AFX_MSG_MAP(CMessageMapDlg)
         ...........
        //}}AFX_MSG_MAP

 ÇüÅ»óÀ¸·Î´Â ±×³É ÀÏ¹Ý ÁÖ¼®¹®Ã³·³ º¸À̴µ¥¿ä. ÀÌ°ÍÀº ¹Ù·Î Ŭ·¡½º À§Àúµå°¡ ¸¸µé¾îÁÖ´Â ±¸¹®ÀÌ µé¾î°¡´Â ºÎºÐÀÔ´Ï´Ù. »ç¿ëÀÚ°¡ ¸¸µç ±¸¹®Àº ÀÌ ±¸¹® ¹Ù±ùÂÊ¿¡ ½áÁÖ¾î¾ß ÇÕ´Ï´Ù.

±×·¯´Ï±î À§Ä¡´Â ´ÙÀ½ºÎºÐÀÌÁÒ.

BEGIN_MESSAGE_MAP(CMessageMapDlg, CDialog)
        //{{AFX_MSG_MAP(CMessageMapDlg)
}
       //}}AFX_MSG_MAP
           //  <--------- ¿©±â°¡ »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ ¸ÅÅ©·Î°¡ µé¾î°¡´Â °÷
END_MESSAGE_MAP()

 

ÇÏÁö¸¸ °¡Àå Å« ¹®Á¦°¡ Çϳª ³²¾ÆÀִµ¥¿ä. ¹Ù·Î Release ¸ðµå·Î ÄÄÆÄÀÏÇÒ °æ¿ì ½ÇÇà½Ã ¿¡·¯°¡ ³­´Ù´Â °Çµ¥¿ä. Debug ¸ðµå¿¡¼± ÀüÇô ¹®Á¦°¡ ¾ø´Âµ¥ ¸»ÀÌÁÒ. ±×·¡¼­ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ÇØ°áÀÌ °¡´ÉÇÕ´Ï´Ù.

Çì´õÆÄÀÏ¿¡¼­ Çڵ鷯 ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔ ºÎºÐÀ» ´ÙÀ½Ã³·³ °íĨ´Ï´Ù.

 

        afx_msg void OnButtonFxn(UINT nID);

cpp ÆÄÀÏ¿¡¼­´Â Çڵ鷯 ÇÔ¼öÀÇ ¾ÕºÎºÐÀ» °íĨ´Ï´Ù.

void CMessageMapDlg::OnButtonFxn(UINT nID)
{
      ....................
}

 

 °íÄ¥³»¿ëÀÌ ¹«¾î³Ä Çϸé, Çڵ鷯 ÇÔ¼ö¿¡ ÀÎÀÚ¸¦ Çϳª ÁÖ´Â °Ì´Ï´Ù. ÀÎÀÚ ÀÚü´Â º° Àǹ̰¡ ¾ø½À´Ï´Ù. ±×Àú ÀÎÀÚ¸¦ ÁÖ¸é ½Å±âÇÏ°Ôµµ Release ¸ðµå¿¡¼­ ¿¡·¯°¡ ³ªÁö ¾Ê´õ¶ó´Â °ÍÀÌÁÒ.

 ±×¸®°í ´Ù¸¥ ¹æ¹ýÀ¸·Îµµ ÇØ°áÀÌ °¡´ÉÇÕ´Ï´Ù. ±× ÇØ°áÃ¥Àº ON_CONTROL_EX ¸¦ »ç¿ëÇÏÁö ¾Ê´Â °Ì´Ï´Ù. ÇÏÇÏ... »ç½Ç ´õ °£´ÜÇÑ ¹æ¹ýÀÌ ÀÖ±ä ÇÕ´Ï´Ù. ON_BN_CLICKED ¸ÅÅ©·Î¸¦ ´ÙÀ½Ã³·³ °íÄ¡´Â °ÍÀÌÁÒ.

      ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
      ON_BN_CLICKED(IDC_BUTTON2, OnButton1)
      ON_BN_CLICKED(IDC_BUTTON3, OnButton1)
      ON_BN_CLICKED(IDC_BUTTON4, OnButton1)
      ON_BN_CLICKED(IDC_BUTTON5, OnButton1)

ÀÌ·¸°Ô Çؼ­ °£´ÜÇÏ°Ô ÇØ°áµÇ¾ú½À´Ï´Ù. º¸½Ã´Ù½ÃÇÇ ON_BN_CLICKED ¸ÅÅ©·Î¿¡¼­ Çڵ鷯 ÇÔ¼ö ºÎºÐÀÎ OnButton1 ºÎºÐ¸¸ Çϳª·Î ÅëÀÏÇØ ÁÖ´Â °Í »ÓÀÔ´Ï´Ù.

ÀÌ·¯ÇÑ ¹æ¹ýÀ» »ç¿ëÇؼ­ Çڵ鷯 ÇÔ¼ö¸¦ Çϳª·Î ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.

 

8. À§¿¡¼­´Â Çڵ鷯 ÇÔ¼ö¸¦ Çϳª·Î ÁÙ¿© º¸¾Ò½À´Ï´Ù. ÇÏÁö¸¸ ¸ÅÅ©·Î ºÎºÐÀº ¿ª½Ã ¹öÆ° °³¼ö¸¸Å­ ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù. ¹°·Ð ¸ÅÅ©·Î ºÎºÐÀº Ŭ·¡½º À§Àúµå°¡ ¸¸µé¾î ÁÖ´Â °ÍÀÌ°í, »ç¿ëÀÚ°¡ ÇØ¾ß ÇÒ ºÎºÐÀº Ŭ·¡½º À§Àúµå°¡ ¸¸µé¾îÁÖ´Â ¸ÅÅ©·Î ºÎºÐÀ» Á¶±Ý °íÃÄÁÖ´Â °ÍÀÌÁÒ.

 ±×·±µ¥ ON_CONTROL_RANGE ¶ó´Â ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇؼ­ ´ÙÀ½°ú °°ÀÌ ¸ÅÅ©·Î ºÎºÐµµ Çϳª·Î ÁÙ¿©ÁÙ ¼ö ÀÖ½À´Ï´Ù.

     ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON5, OnButton1)

 ÀÌ ¸ÅÅ©·Îµµ ¿ª½Ã Debug ¸ðµå¿¡¼­´Â ¸ÖÂÄÇÏ°í, Release ¸ðµå¿¡¼­ ½ÇÇà¿¡·¯°¡ ³³´Ï´Ù. ±×·¡¼­ ¾Õ¿¡¼­ ¸»ÇßµíÀÌ, ÀÌ ¿¡·¯¸¦ ÇÇÇϱâ À§ÇØ Çڵ鷯 ÇÔ¼ö¿¡ ÀÎÀÚ¸¦ Çϳª Ãß°¡ÇØ ÁÝ´Ï´Ù. ±×·¸°Ô ÇÏ¸é ½Å±âÇÏ°Ôµµ ¿¡·¯°¡ ¾ø¾îÁý´Ï´Ù.

 

- end of this article -