< UpDown >
WTL¿¡¼ °ø¿ë ÄÁÆ®·ÑÀÇ updown(¶Ç´Â ½ºÇÉ ¹öư) ÄÁÆ®·ÑÀ» CUpDownCtrlT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö¿¡´Â Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù¸¸ ±× Ŭ·¡½º´Â CUpDownCtrlT Ŭ·¡½ºÀÇ base class·Î¼ »ç¿ëµË´Ï´Ù. atlctrls.h Çì´õ¿¡¼´Â typedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.
|
// atlctrls.h typedef CUpDownCtrlT<ATL::CWindow> CUpDownCtrl; |
À̰ÍÀº CUpDownCtrlŬ·¡½º´ÂCWindowŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
¡¡WTLÀÇ CUpDownCtrlŬ·¡½º´Â MFCÀÇ CSpinButtonCtrlŬ·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CUpDownCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ ÀÔ´Ï´Ù. RGB °¢°¢ÀÇ updown ÄÁÆ®·ÑÀ» Á¶ÀÛÇØ »öÀ» ÀÛ¼ºÇÕ´Ï´Ù.

|
// stdafx.h #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> #include <atlctrls.h> // ÄÁÆ®·Ñ¿ë Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ |
|
// maindlg.h class CMainDlg : public CDialogImpl<CMainDlg> { public: enum { IDD = IDD_MAINDLG }; CUpDownCtrl
m_updown_r; // [R]¿ë CUpDownCtrl
m_updown_g; // [G]¿ë CUpDownCtrl
m_updown_b; // [B]¿ë CRect
m_rect;
// »ö Ç¥½Ã¿ë ±¸Çü // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_PAINT(OnPaint)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_HANDLER_EX(IDC_EDIT_R, EN_CHANGE, OnEditChangeR)
COMMAND_HANDLER_EX(IDC_EDIT_G, EN_CHANGE, OnEditChangeG)
COMMAND_HANDLER_EX(IDC_EDIT_B, EN_CHANGE, OnEditChangeB)
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_updown_r = GetDlgItem(IDC_SPIN_R); m_updown_g = GetDlgItem(IDC_SPIN_G); m_updown_b = GetDlgItem(IDC_SPIN_B); m_updown_r.SetRange(0, 255); m_updown_g.SetRange(0, 255); m_updown_b.SetRange(0, 255); // »ö Ç¥½Ã¿ë ±¸ÇüÀ» Ãëµæ CStatic view = GetDlgItem(IDC_STATIC_VIEW); view.GetWindowRect(m_rect); ScreenToClient(m_rect); return TRUE; } void OnPaint(HDC /*hDC*/){ CPaintDC dc(m_hWnd); CBrush brush; brush.CreateSolidBrush(RGB(m_updown_r.GetPos(),
m_updown_g.GetPos(), m_updown_b.GetPos())); dc.FillRect(m_rect, brush); } void CheckAndUpdate(CUpDownCtrl&
updown){ if(updown.m_hWnd != NULL){
// ¹üÀ§ üũ
BOOL bError;
updown.GetPos(&bError);
if(bError)
updown.SetPos(255); } InvalidateRect(m_rect); } void OnEditChangeR(UINT uNotifyCode,
int nID, HWND hWndCtl){ CheckAndUpdate(m_updown_r); } void OnEditChangeG(UINT uNotifyCode,
int nID, HWND hWndCtl){ CheckAndUpdate(m_updown_g); } void OnEditChangeB(UINT uNotifyCode,
int nID, HWND hWndCtl){ CheckAndUpdate(m_updown_b); } 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; } |
¡¡¿ì¼± ÀÚ¿øÀ» ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ½ºÅÂÆ½, ¿¡µðÆ®, updown ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÏ°í ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© ¿¡µðÆ® ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼´Â µðÆúÆ®¿¡ [¹øÈ£]¿¡ üũ¸¦ ³Ö¾î updown ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼´Â µðÆúÆ®¿¡ [¹èÄ¡]·Î [¿ì´Ü]À» ¼±ÅÃÇϰí [ÀÚµ¿ °ü·ÃÁþ°í], [¼öÄ¡ÀÇ ÀÚµ¿ Ç¥½Ã], [ÀÚ¸®¼ö ´Ü¶ôÁö¾î ÀÌ·ç¾î], [¿öµå·¦]¿¡ üũ¸¦ ³Ö½À´Ï´Ù. ¶ÇÇÑ »ö Ç¥½Ã¿ëÀÇ ½ºÅÂÆ½ ÄÁÆ®·ÑÀÇ ÇÁ·ÎÆÛƼ¿¡¼´Â [°¡½Ã]ÀÇ Ã¼Å©¸¦ off ÇÕ´Ï´Ù.
|
ÄÁÆ®·Ñ ¸í |
¸®¼Ò½ºID |
|
½ºÅÂÆ½([R]¶óº§¿ë) |
IDC_STATIC(µðÆúÆ®) |
|
½ºÅÂÆ½([G]¶óº§¿ë) |
IDC_STATIC(µðÆúÆ®) |
|
½ºÅÂÆ½([B]¶óº§¿ë) |
IDC_STATIC(µðÆúÆ®) |
|
¿¡µðÆ®([R]¿ë) |
IDC_EDIT_R |
|
¿¡µðÆ®([G]¿ë) |
IDC_EDIT_G |
|
¿¡µðÆ®([B]¿ë) |
IDC_EDIT_B |
|
updown([R]¿ë) |
IDC_SPIN_R |
|
updown([G]¿ë) |
IDC_SPIN_G |
|
updown([B]¿ë) |
IDC_SPIN_B |
|
½ºÅÂÆ½(»ö Ç¥½Ã¿ë) |
IDC_STATIC_VIEW |
updown ÄÁÆ®·ÑÀÇ [ÀÚµ¿ °ü·ÃÁþ°í]¿¡ üũ ÇÏ´Â °ÍÀ¸·Î Z¿À´õ¸¦ ±âº»À¸·Î updown ÄÁÆ®·ÑÀÇ Á÷ÀüÀÇ ÄÁÆ®·Ñ¿¡ ÀÚµ¿ÀûÀ¸·Î °ü·Ã ÁöÀ» ¼ö ÀÖ½À´Ï´Ù. À̹ø ¿¹¿¡¼´Â [R]¿ë ¿¡µðÆ® ÄÁÆ®·Ñ ´ÙÀ½¿¡ [R]¿ë updown
ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÏ´Â °ÍÀ¸·Î [R]¿ë ¿¡µðÆ® ÄÁÆ®·Ñ°ú [R]¿ë updown ÄÁÆ®·ÑÀ» °ü·Ã ÁöÀ» ¼ö ÀÖ½À´Ï´Ù. °°ÀÌ [G]³ª [B] ÀÇ ÄÁÆ®·Ñµµ Â÷·Ê·Î ¹èÄ¡ÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ stdafx.h ¿¡¼´Â CUpDownCtrl Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ atlctrls.h Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.
¡¡CMainDlgŬ·¡½º¿¡¼´Â ¿ì¼± updown ÄÁÆ®·Ñ¿ëÀ¸·Î CUpDownCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϱâ À§Çؼ´Â WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ´ëÀÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×¸®°í »öÀ» Ç¥½ÃÇÏ´Â ±¸ÇüÀ» ³ªÅ¸³»´Â CRect Ŭ·¡½ºÀÇ ÀνºÅϽºµµ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇØ µÓ´Ï´Ù.
¡¡´ÙÀ½¿¡ WM_INITDIALOG
¸Þ¼¼Áö Çڵ鷯·Î updown ÄÁÆ®·ÑÀÇ ¹üÀ§¸¦ ¼³Á¤ÇÕ´Ï´Ù. ±×¸®°í »ö Ç¥½Ã¿ëÀÇ ½ºÅÂÆ½ ±¸ÇüÀ» ÃëµæÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ ÅëÁö Äڵ尡 EN_CHANGEÀÇ ¿¡µðÆ® ÄÁÆ®·Ñ¿ë Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ [R][G][B] °¢°¢ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯´Â ¿¡µðÆ® ÄÁÆ®·ÑÀÇ ³»¿ëÀÌ º¯°æµÇ¾úÀ» ¶§ (Á÷Á¢Ä¡¸¦ ÀÔ·ÂÇßÀ» ¶§¿Í updown ÄÁÆ®·Ñ·Î °ªÀ» º¯°æÇßÀ» ¶§ ) ¿¡ È£Ã⠵Ǿî Áý´Ï´Ù. ÀÌ Çڵ鷯¿¡¼´Â CheckAndUpdate() À̶ó°í ÇÏ´Â µ¶ÀÚÀûÀÎ ÇÔ¼ö¸¦ È£ÃâÇØ GetPos()¿¡ ÀÇÇØ °ªÀÇ ¹üÀ§°¡ Á¤´çÇÑÁö ¾î¶²Áö üũÇÏ°í ³ª¼ »ö Ç¥½Ã¿ë ±¸ÇüÀ» °»½ÅÇÕ´Ï´Ù.
¡¡¸¶Áö¸·À¸·Î WM_PAINT
¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇØ »öÀ» ¹¦È ÇÕ´Ï´Ù.