< Åø¹Ù >
WTL¿¡¼ °ø¿ë ÄÁÆ®·ÑÀÇ Åø¹Ù ÄÁÆ®·ÑÀ» CToolBarCtrlT ¶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö¿¡´Â Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù¸¸ ±× Ŭ·¡½º´Â CToolBarCtrlT Ŭ·¡½ºÀÇ base class·Î¼ »ç¿ëµË´Ï´Ù. atlctrls.h Çì´õ¿¡¼´Â typedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.
|
// atlctrls.h typedef CToolBarCtrlT<ATL::CWindow> CToolBarCtrl; |
À̰ÍÀº CToolBarCtrlŬ·¡½º´Â CWindow Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
¡¡WTLÀÇ CToolBarCtrlŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CToolBarCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÀÛ¼ºÇØ Åø¹Ù¸¦ Ãß°¡ÇØ Åø¹Ù À§ÀÇ ÃÖÃÊÀÇ ¹öưÀ» µå·Ó ´Ù¿î ½ºÅ¸ÀÏ·Î ÇÕ´Ï´Ù.

|
// stdafx.h #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> #include <atlctrls.h> #include <atlframe.h> |
|
// mainfrm.h³» class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>, public CMessageFilter, public CIdleHandler { public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME) virtual BOOL
PreTranslateMessage(MSG* pMsg){ return CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg); } virtual
BOOL OnIdle(){ UIUpdateToolBar(); return FALSE; } BEGIN_UPDATE_UI_MAP(CMainFrame) // ¿£Æ®¸® ¾øÀ½
END_UPDATE_UI_MAP() BEGIN_MSG_MAP_EX(CMainFrame)
MSG_WM_CREATE(OnCreate)
NOTIFY_CODE_HANDLER_EX(TBN_DROPDOWN, OnToolbarDropdown)
COMMAND_ID_HANDLER_EX(ID_BUTTON_MSG, OnButtonMsg)
COMMAND_ID_HANDLER_EX(ID_MENUITEM_HELLOATL, OnMenuHelloATL)
COMMAND_ID_HANDLER_EX(ID_MENUITEM_HELLOWTL, OnMenuHelloWTL)
COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnMenuExit)
CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>) END_MSG_MAP() LRESULT OnCreate(LPCREATESTRUCT lpcs){ // Åø¹Ù¸¦ ÀÛ¼º CreateSimpleToolBar(); UIAddToolBar(m_hWndToolBar); // Åø¹ÙÀÇ ½ºÅ¸ÀÏ º¯°æ CToolBarCtrl bar = m_hWndToolBar; bar.SetStyle(bar.GetStyle() |
TBSTYLE_FLAT); bar.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); // Åø¹Ù»óÀÇ ¹öưÀÇ ½ºÅ¸ÀÏÀ» º¯°æ
TBBUTTONINFO bi = {sizeof(bi), TBIF_STYLE}; bar.GetButtonInfo(ID_BUTTON_MSG, &bi); bi.fsStyle |= TBSTYLE_DROPDOWN; bar.SetButtonInfo(ID_BUTTON_MSG, &bi); // ¸Þ½ÃÁö ·çÇÁ¿¡ ¸Þ¼¼Áö ÇÊÅÍ¿Í
¾ÆÀ̵¹ Çڵ鷯¸¦ Ãß°¡ CMessageLoop* pLoop = _Module.GetMessageLoop(); pLoop->AddMessageFilter(this); pLoop->AddIdleHandler(this); return 0; } LRESULT OnToolbarDropdown(LPNMHDR pnmh){ LPNMTOOLBAR pnmtb = (LPNMTOOLBAR)pnmh; if(pnmtb->iItem ==
ID_BUTTON_MSG){
CToolBarCtrl bar = pnmtb->hdr.hwndFrom;
// µå·Ó ´Ù¿î ¸Þ´º¸¦ Ç¥½ÃÇÏ´Â À§Ä¡¸¦ Ãëµæ
CRect rcButton;
bar.GetRect(ID_BUTTON_MSG, rcButton);
bar.MapWindowPoints(HWND_DESKTOP, rcButton);
TPMPARAMS tpm = {sizeof(tpm)};
tpm.rcExclude = rcButton;
// µå·Ó ´Ù¿î ¸Þ´º Ç¥½Ã
CMenu menuDropdown;
menuDropdown.LoadMenu(IDR_MENU_DROPDOWN); menuDropdown.GetSubMenu(0).TrackPopupMenuEx(
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
rcButton.left, rcButton.bottom,
m_hWnd, &tpm); } return TBDDRET_DEFAULT; } void OnButtonMsg(UINT uNotifyCode, int nID, HWND hWndCtl){ MessageBox(_T("Hello World")); } void OnMenuHelloATL(UINT uNotifyCode,
int nID, HWND hWndCtl){ MessageBox(_T("Hello ATL")); } void OnMenuHelloWTL(UINT uNotifyCode,
int nID, HWND hWndCtl){ MessageBox(_T("Hello WTL")); } void OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){ PostMessage(WM_CLOSE); } }; |
|
// app.cpp #include "stdafx.h" #include "resource.h" #include "mainfrm.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: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà { CMessageLoop theLoop; _Module.AddMessageLoop(&theLoop); CMainFrame wnd; wnd.CreateEx();
wnd.ShowWindow(nCmdShow); wnd.UpdateWindow(); nRet = theLoop.Run(); _Module.RemoveMessageLoop(); } _Module.Term(); ::CoUninitialize(); return nRet; } |
¡¡¿ì¼± ÇÁ·ÎÁ§Æ®¿¡ IDR_MAINFRAME ¶ó°í ÇÏ´Â IDÀÇ Åø¹Ù ¸®¼Ò½º¸¦ Ãß°¡ÇÏ°í ´ÙÀ½°ú °°Àº ¹öưÀ» Ãß°¡ÇÕ´Ï´Ù. ¹öư ID´Â ID_BUTTON_MSGÀ¸·Î ÇÕ´Ï´Ù.

°Ô´Ù°¡ µå·Ó ´Ù¿î¿ëÀÇ ¸Þ´º ÀÚ¿øÀ» Ãß°¡ÇÕ´Ï´Ù. ¸Þ´º ¸®¼Ò½º ID´Â IDR_MENU_DROPDOWNÀ¸·Î Çϰí Åé ·¹º§¿¡ [index0]¸¦ ±× ¾Æ·¡¿¡ [Hello ATL]¸Þ´º ¾ÆÀÌÅÛ°ú [Hello
WTL] ¸Þ´º ¾ÆÀÌÅÛÀ» Ãß°¡ÇÕ´Ï´Ù.
[Hello ATL] ¸Þ´º ¾ÆÀÌÅÛ¿¡´ÂID_MENUITEM_HELLOATL, [Hello WTL] ¸Þ´º ¾ÆÀÌÅÛ¿¡´ÂID_MENUITEM_HELLOWTL ¶ó°í ÇÏ´ÂIDÀ» ¼³Á¤ÇÕ´Ï´Ù.

¡¡´ÙÀ½À¸·Î stdafx.h ¿¡¼´Â CToolBarCtrl Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ atlctrls.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.
¡¡CMainFrameŬ·¡½º¿¡¼´Â ÀϹÝÀûÀÎ ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÀÛ¼ºÇÕ´Ï´Ù. WM_CREATE¸Þ¼¼Áö Çڵ鷯·Î ¿ì¼± CreateSimpleToolBar()À» È£ÃâÇØ Åø¹Ù¸¦ ÀÛ¼ºÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ ÇÁ·¹ÀÓ À©µµ¿ìÀÇ ¸â¹ö º¯¼öÀÎ m_hWndToolBar¿¡ Åø¹ÙÀÇ ÇÚµéÀÌ ¼³Á¤µË´Ï´Ù. ´ÙÀ½¿¡ CToolBarCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÌ Åø¹ÙÀÇ ÇÚµé·Î ÃʱâÈ Çϰí Åø¹ÙÀÇ ½ºÅ¸ÀÏÀ» º¯°æÇÕ´Ï´Ù. ¿©±â¿¡¼´Â Åø¹Ù »óÀÇ µå·Ó ´Ù¿î ¹öư¿¡ È»ìÇ¥¸¦ Ãß°¡Çϱâ À§ÇØ TBSTYLE_EX_DRAWDDARROWS ½ºÅ¸ÀÏÀ» ¼³Á¤ÇÕ´Ï´Ù. ±×¸®°í ID°¡ ID_BUTTON_MSGÀÇ ¹öư¿¡ µå·Ó ´Ù¿î ½ºÅ¸ÀÏÀ» Ãß°¡ÇÕ´Ï´Ù.
¡¡´ÙÀ½À¸·Î ÅëÁö Äڵ尡 TBN_DROPDOWNÀÇ ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯´Â µå·Ó ´Ù¿î ¹öưÀÇ È»ìÇ¥ ºÎºÐÀ» Ŭ¸¯ÇÒ ¶§¸¶´Ù ºÒ·Á °©´Ï´Ù. ¿©±â¿¡¼´Â ¹öư ID¸¦ È®ÀÎÇÏ°í µå·Ó ´Ù¿î ¸Þ´º¸¦ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½À¸·Î Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. OnButtonMsg()´Â µå·Ó ´Ù¿î ¹öưÀ» ´·¶À» ¶§¿¡ ºÒ·ÁÁö´Â OnMenuHelloATL()¿ÍOnMenuHelloWTL()´Â µå·Ó ´Ù¿î ¸Þ´º Ç׸ñÀ» ½ÇÇàÇßÀ» ¶§¿¡ ºÒ·Á Áý´Ï´Ù. ÀÌ·¯ÇÑ Çڵ鷯 ¿¡¼´Â ¸Þ½ÃÁö ¹Ú½º¸¦ Ç¥½ÃÇϰí ÀÖÀ» »ÓÀÔ´Ï´Ù.
¡¡¸¶Áö¸·À¸·Î _tWinMain() ¿¡¼ ICC_WIN95_CLASSES Ç÷¡±×¸¦ ÁöÁ¤ÇØ AtlInitCommonControls()¸¦ È£ÃâÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ Åø¹Ù ÄÁÆ®·ÑÀÌ »ç¿ë °¡´ÉÇÏ°Ô µË´Ï´Ù.