< ¼ºê Ŭ·¡½º >
¼ºê Ŭ·¡½ºÈ¸¦ ÇÏ¸é ±âÁ¸ÀÇ À©µµ¿ì(¿¹¸¦ µé¸é ´ÙÀ̾ó·Î±×»óÀÇ ÄÁÆ®·Ñ) ÀÇ µ¿ÀÛÀ» È®ÀåÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
¡¡ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº ´ÙÀ̾ó·Î±× »óÀÇ ¹öư ÄÁÆ®·ÑÀ» ¼ºê Ŭ·¡½ºÈ ÇØ Ŭ¸¯ µÇ¾úÀ» ¶§¿¡ beepÀ½À» ¿ï¸®´Â ¹öư(beep ¹öư) À» ÀÛ¼ºÇÏ´Â ¿¹ ÀÔ´Ï´Ù. ÀÌ ¿¹ ¿¡¼´ÂBeepButton.hÀ̶ó°í ÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁغñÇØ °Å±â¿¡ CBeepButton¶ó°í Çϴ Ŭ·¡½º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
|
// BeepButton.h class CBeepButton : public CWindowImpl<CBeepButton> { public: BEGIN_MSG_MAP_EX(CBeepButton)
MSG_WM_LBUTTONDOWN(OnLButtonDown) END_MSG_MAP() void OnLButtonDown(UINT uFlags, CPoint pt){ MessageBeep(MB_ICONASTERISK); SetMsgHandled(FALSE); } }; |
CBeepButton Ŭ·¡½º¿¡¼´Â WM_LBUTTONDOWN ¸Þ¼¼Áö Çڵ鷯·Î beepÀ½À» ¿ï¸®µµ·Ï Çϰí ÀÖ½À´Ï´Ù. ±×¸®°í SetMsgHandled(FALSE)¸¦ È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ beep À½À» ¿ï¸®´Â Àܴ̿ Åë»óÀÇ µ¿ÀÛÀ» Çϵµ·Ï Çϰí ÀÖ½À´Ï´Ù.
µ¡ºÙ¿© ÀÌ CBeepButtonŬ·¡½º ÀÚü´Â Åë»óÀÇ À©µµ¿ìÀÌ¸ç ¹öư ÄÁÆ®·Ñ·Î ÇÑÁ¤µÈ °ÍÀÌ ¾Æ´Õ´Ï´Ù. ½ÇÁ¦·Î ¹öư ÄÁÆ®·Ñ¿¡ ±Ù°ÅÇÑ beep ¹öưÀ» ÀÛ¼ºÇϱâ À§Çؼ´Â CBeepButton::SubclassWindow()¿¡ ¹öư ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ÁöÁ¤ÇØ È£ÃâÇÕ´Ï´Ù.
|
CBeepButton m_button_beep; ... LRESULT OnInitDialog(HWND
hWnd, LPARAM lParam){ ... ... m_button_beep.SubclassWindow(±âÁ¸ÀÇ ¹öư ÄÁÆ®·ÑÀÇ ÇÚµé); } |
ÀÌ¿Í °°ÀÌ ½´ÆÛ Ŭ·¡½º È¿¡¼´ÂDECLARE_WND_SUPERCLASS ¸ÅÅ©·Î¸¦ »ç¿ëÇØ ¡¸Å¬·¡½º¡¹¿¡ ´ëÇØ¼ ±âº»À¸·Î µÇ´Â ÄÁÆ®·ÑÀ» ÁöÁ¤ÇÕ´Ï´Ù¸¸ ¼ºê Ŭ·¡½ºÈ¿¡¼´Â SubclassWindow()À» »ç¿ëÇØ ¡¸ÀνºÅϽº¡¹¿¡ ´ëÇØ¼ ±âº»À¸·Î µÇ´Â ÄÁÆ®·ÑÀ» ÁöÁ¤ÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ÀÌ CBeepButtonŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
// stdafx.h #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> |
|
// maindlg.h class CMainDlg : public CDialogImpl<CMainDlg> { public: enum { IDD = IDD_MAINDLG }; CBeepButton
m_button_beep; // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog) COMMAND_ID_HANDLER_EX(IDOK,
OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel) END_MSG_MAP() LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){ // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡ CenterWindow(); // Å« ¾ÆÀÌÄÜ ¼³Á¤
HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME,
LR_DEFAULTCOLOR,
::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON)); SetIcon(hIcon, TRUE); // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤
HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME,
LR_DEFAULTCOLOR, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON)); SetIcon(hIconSmall, FALSE); // ÄÁÆ®·Ñ ¼ºê Ŭ·¡½ºÈ m_button_beep.SubclassWindow(GetDlgItem(IDC_BUTTON_BEEP)); return TRUE; } void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){ EndDialog(nID); } void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){ EndDialog(nID); } }; |
|
// Control.cpp #include "stdafx.h" #include "resource.h" #include "BeepButton.h" #include "maindlg.h" CAppModule _Module; int WINAPI _tWinMain(HINSTANCE
hInstance, HINSTANCE, LPTSTR lpCmdLine,
int nCmdShow) { HRESULT hRes = ::CoInitialize(NULL); ATLASSERT(SUCCEEDED(hRes)); ::DefWindowProc(NULL,
0, 0, 0L); AtlInitCommonControls(ICC_COOL_CLASSES
| ICC_WIN95_CLASSES); hRes
= _Module.Init(NULL, hInstance); ATLASSERT(SUCCEEDED(hRes)); int nRet = 0; // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà { CMainDlg dlgMain; nRet = dlgMain.DoModal(); } _Module.Term();
::CoUninitialize(); return nRet; } |
¡¡¿ì¼± , ¸®¼Ò½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ¹öư ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù.
|
ÄÁÆ®·Ñ¸í |
¸®¼Ò½º ID |
|
Ǫ½¬ ¹öư |
IDC_BUTTON_BEEP |
¡¡´ÙÀ½¿¡ CMainDlg Ŭ·¡½º¿¡¼ beep ¹öư¿ëÀ¸·Î CBeepButton Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀº WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·ÎSubclassWindow()¿¡ ÀÇÇØ ¼ºê Ŭ·¡½ºÈ ÇÕ´Ï´Ù.
¡¡¸¶Áö¸·À¸·Î Control.cpp ÆÄÀϳ»¿¡¼ maindlg.h Çì´õÀÇ ¾Õ¿¡ BeepButton.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.