< ContainedWindow >
ContainedWindow´Â ¹ÞÀº ¸ðµç ¸Þ¼¼Áö¸¦ ÀÚ½ÅÀÇ ÄÁÅ×ÀÌ³Ê À©µµ¿ì¿¡ °Ç³×ÁÝ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÄÁÅ×ÀÌ³Ê À©µµ¿ì´Â ºÎ¸ð À©µµ¿ì À̹ǷΠContainedWindow´Â ±× ÀÚ½Ä À©µµ¿ì ÀÔ´Ï´Ù¸¸ ±×·¸Áö ¾ÊÀº °æ¿ìµµ ÀÖ½À´Ï´Ù. ÄÁÅ×ÀÌ³Ê À©µµ¿ìÀÇ Å¬·¡½º´Â ContainedWindowÀÇ Å¬·¡½º¸¦ ¸â¹ö º¯¼ö·Î¼ °¡Áý´Ï´Ù.
ContainedWindow´Â ÄÁÆ®·Ñ µîÀÇ Á¤Àǰ¡ ³¡³ À©µµ¿ì Ŭ·¡½º ("BUTTON"³ª"SysListView32"µî ) ¸¦ ±âº»À¸·Î ÇÕ´Ï´Ù. ´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ´ÙÀ̾ó·Î±×¸¦ ÄÁÅ×À̳ʷΠÇßÀ» ¶§ÀÇ ¿¹ ÀÔ´Ï´Ù.
|
// ÄÁÅ×ÀÌ³Ê À©µµ¿ì class CMainDlg : public CDialogImpl<CMainDlg> { public: enum { IDD = IDD_MAINDLG }; CContainedWindow
m_contained;
// ÄÜÅ× Àεµ À©µµ¿ì // constructor¡¡ ¡¡ CMainDlg()
: m_contained(_T("BUTTON"), this, 100) {} ... ... |
¡¡¿ì¼± , ContainedWindowÀÇ ÀνºÅϽº¸¦ ÄÁÅ×ÀÌ³Ê À©µµ¿ì(ÀÌ ¿¹¿¡¼´Â ´ÙÀ̾ó·Î±×) Ŭ·¡½ºÀÇ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. ±×¸®°í ÄÁÅ×ÀÌ³Ê À©µµ¿ìÀÇ
constructor¡¡ ¡¡ À¸·Î ÃʱâÈ ÇÕ´Ï´Ù. Á¦1Àμö¿¡´Â Á¤Àǰ¡ ³¡³ À©µµ¿ì Ŭ·¡½º ¸íÀ» Á¦2Àμö¿¡´Â ¸Þ¼¼Áö¸¦ ó¸®ÇÏ´Â À©µµ¿ì¿¡ÀÇ Æ÷ÀÎÅ͸¦ Á¦3Àμö¿¡´Â ¸Þ¼¼Áö¸¦ ó¸®ÇÏ´Â ´ëü ¸Þ¼¼Áö ¸ÊÀÇ ¹øÈ£¸¦ ÁöÁ¤ ÇÕ´Ï´Ù.
ÀÌ ¿¹ ¿¡¼´Â ¸Þ¼¼Áö¸¦ ó¸®ÇÏ´Â ´ëü ¸Þ¼¼Áö ¸ÊÀÇ ¹øÈ£¸¦ 100·Î ÁöÁ¤Çϰí ÀÖ½À´Ï´Ù. µû¶ó¼ CMainDlg Ŭ·¡½ºÀÇ ¸Þ¼¼Áö ¸ÊÀº ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.
|
Class CMainDlg : public CDialogImpl<CMainDlg> { ... ... // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
...
... ALT_MSG_MAP(100) // ContainedWindow¿ë ´ëü ¸Þ¼¼Áö ¸Ê
MSG_WM_LBUTTONDOWN(OnLButtonDownForContained) END_MSG_MAP() void OnLButtonDownForContained(UINT uFlags,
CPoint pt){ MessageBeep(MB_ICONASTERISK); SetMsgHandled(FALSE); } ... ... |
À̰Ϳ¡ ÀÇÇØ ContainedWindowÀÇ ¸Þ¼¼Áö´Â ¹øÈ£100ÀÇ ´ëü ¸Þ¼¼Áö ¸ÊÀ¸·Î 󸮵˴ϴÙ. Áï , ContainedWindow (ÀÌ ¿¹¿¡¼´Â"BUTTON"À» ÁöÁ¤ÇßÀ¸¹Ç·Î ¹öư ÄÁÆ®·Ñ) ¸¦ ¿ÞÂÊ Å¬¸¯Çϸé OnLButtonDownForContained()°¡ ºÒ·Á °©´Ï´Ù.
¸¶Áö¸·À¸·Î ContainedWindow¸¦ ÀÛ¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÛ¼ºÇϱâ À§Çؼ´Â Create()À» È£ÃâÇÕ´Ï´Ù¸¸ SubclassWindow()¿¡ ÀÇÇØ ±âÁ¸ÀÇ ÄÁÆ®·ÑÀ» ¼ºê Ŭ·¡½ºÈÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
|
class CMainDlg : public CDialogImpl<CMainDlg> { ... ... enum { IDC_BUTTON_BEEP = 1001 }; LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){ // ÄÁÆ®·Ñ ÀÛ¼º m_contained.Create(m_hWnd, CRect(0, 0, 200, 30),
_T("beep ¹öư"), WS_CHILD | WS_VISIBLE, 0, IDC_BUTTON_BEEP); // ¶Ç´Â ±âÁ¸ÀÇ ÄÁÆ®·ÑÀ» ¼ºê Ŭ·¡½ºÈ //
m_contained.SubclassWindow(GetDlgItem(IDC_BUTTON_BEEP)); return TRUE; } ... ... |
ÀÌ¿Í °°ÀÌ ContainedWindow¸¦ »ç¿ëÇϸé CBeepButton¿Í °°ÀÌ »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µéÁö ¾Ê¾Æµµ ÄÁÆ®·ÑÀÇ µ¿ÀÛÀ» º¯°æÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº Ŭ¸¯µÇ¾úÀ» ¶§¿¡ beep À½À» ¿ï¸®´Â ¹öư(beep ¹öư)À» ContainedWindow¸¦ »ç¿ëÇØ ÀÛ¼ºÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
// 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 }; CContainedWindow
m_contained; // constructor¡¡ ¡¡ CMainDlg()
: m_contained(_T("BUTTON"), this, 100) {} // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel) ALT_MSG_MAP(100)
MSG_WM_LBUTTONDOWN(OnLButtonDownForContained) END_MSG_MAP() void OnLButtonDownForContained(UINT uFlags,
CPoint pt){ MessageBeep(MB_ICONASTERISK); SetMsgHandled(FALSE); } 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_contained.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 "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 ¹öư ¿ëÀ¸·Î ContainedWindow Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀº CMainDlg Ŭ·¡½ºÀÇ constructor¡¡ ¡¡ À¸·Î ÃʱâÈÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ ContainedWindow ¿ëÀÇ ´ëü ¸Þ¼¼Áö ¸Ê°ú ¸Þ¼¼Áö Çڵ鷯¸¦ ÁغñÇØ ¸¶Áö¸·¿¡ WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î SubclassWindow()¿¡ ÀÇÇØ ±âÁ¸ÀÇ ¹öư ÄÁÆ®·ÑÀ» ¼ºê Ŭ·¡½º È ÇÕ´Ï´Ù.