¸Þ½ÃÁö ¸Ê, Çڵ鷯, ¸ÅÅ©·ÎÀÇ °ü°è
Âü°í¹®Çå : 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 -