< ½´ÆÛ Ŭ·¡½º >
½´ÆÛ Ŭ·¡½ºÈ¸¦ Çϸé ÄÁÆ®·Ñ µîÀÇ Á¤Àǰ¡ ³¡³ À©µµ¿ì Ŭ·¡½º("BUTTON"³ª"SysListView32"µî )¸¦ È®ÀåÇÏ´Â »õ·Î¿î À©µµ¿ì Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
¡¡ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº ¹öư ÄÁÆ®·ÑÀ» ½´ÆÛ Ŭ·¡½ºÈ ÇØ Ŭ¸¯µÇ¾úÀ» ¶§¿¡ beepÀ½À» ¿ï¸®´Â ¹öư(beep ¹öư) À» Á¤ÀÇÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÀÌ ¿¹¿¡¼´ÂBeepButton.hÀ̶ó°í ÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁغñÇØ °Å±â¿¡ CBeepButton¶ó°í Çϴ Ŭ·¡½º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
|
// BeepButton.h class CBeepButton : public CWindowImpl<CBeepButton> { public:
DECLARE_WND_SUPERCLASS(_T("BeepButton"),
_T("BUTTON")) BEGIN_MSG_MAP_EX(CBeepButton)
MSG_WM_LBUTTONDOWN(OnLButtonDown) END_MSG_MAP() void OnLButtonDown(UINT uFlags, CPoint pt){ MessageBeep(MB_ICONASTERISK); SetMsgHandled(FALSE); } }; |
½´ÆÛ Ŭ·¡½ºÈÇϱâ À§Çؼ´Â DECLARE_WND_SUPERCLASS() ¸ÅÅ©·Î¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·ÎÀÇ Á¦1Àμö¿¡´Â ½´ÆÛ Ŭ·¡½ºÈÇÏ´Â À©µµ¿ì Ŭ·¡½º ¸íÀ» ÁöÁ¤ÇØ Á¦2Àμö¿¡´Â ±× ¿øÀÌ µÇ´Â ±âÁ¸ÀÇ À©µµ¿ì Ŭ·¡½º ¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¿¹ ¿¡¼´Â beep ¹öưÀÌ "BUTTON" À©µµ¿ì Ŭ·¡½º¿¡ ±Ù°ÅÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
CBeepButtonŬ·¡½º¿¡¼´Â WM_LBUTTONDOWN
¸Þ¼¼Áö Çڵ鷯·Î beepÀ½À» ¿ï¸®µµ·Ï Çϰí ÀÖ½À´Ï´Ù. ±×¸®°í SetMsgHandled(FALSE)¸¦ È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ beepÀ½À» ¿ï¸®´Â Àܴ̿ º¸Åë ¹öư°ú °°ÀÌ µ¿ÀÛÇϵµ·Ï Çϰí ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ÀÌ 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 }; enum { IDC_BUTTON_BEEP = 1001 }; 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.Create(m_hWnd, CRect(0, 0, 200, 30),
_T("beep ¹öư"), WS_CHILD | WS_VISIBLE, 0, IDC_BUTTON_BEEP); m_button_beep.SetFont(GetFont()); m_button_beep.CenterWindow(); 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; } |
¡¡¿ì¼± CMainDlg Ŭ·¡½º¿¡¼ beep ¹öư¿ëÀ¸·Î CBeepButton Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. ±×¸®°í ±× ¹öư¿ëÀÇ ID À¸·Î¼ IDC_BUTTON_BEEP¸¦ ¼±¾ðÇÕ´Ï´Ù.
¡¡´ÙÀ½À¸·Î WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î beep ¹öưÀ» ÀÛ¼ºÇÕ´Ï´Ù.
¡¡¸¶Áö¸·À¸·Î Control.cppÆÄÀϳ»¿¡¼ maindlg.h Çì´õÀÇ ¾Õ¿¡ BeepButton.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.
¡¡µ¡ºÙ¿© WTLÀº DECLARE_FRAME_WND_SUPERCLASS
À̶ó°í ÇÏ´Â ¸ÅÅ©·Îµµ ÁغñÇØ ÀÖ½À´Ï´Ù. À̰ÍÀº ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ½´ÆÛ Ŭ·¡½ºÈÇÕ´Ï´Ù.