< »ö ¼±Åà ´ÙÀ̾ó·Î±× >
WTL¿¡¼ common dialogÀÇ »ö ¼±Åà ´ÙÀ̾ó·Î±×¸¦ CColorDialogImplÀ̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶È Çϰí ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º´Â ATLÀÇ CDialogImpl Ŭ·¡½º¿Í °°ÀÌ base class·Î¼ÀÇ º¸°í »ç¿ëÇÕ´Ï´Ù. atldlgs.h Çì´õ¿¡¼´Â CColorDialogImplŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º·Î¼ CColorDialogŬ·¡½º°¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù.
|
// atldlgs.h class CColorDialog : public CColorDialogImpl<CColorDialog> { ... ... |
¡¡WTLÀÇ CColorDialog Ŭ·¡½º´Â MFCÀÇ µ¿¸íÀÇ
Ŭ·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CColorDialogŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
CColorDialog dlg(RGB(255, 0,
0)); if(dlg.DoModal() == IDOK){ CString
strMsg; strMsg.Format(_T("R£º%d\nG£º%d\nB£º%d"), GetRValue(dlg.GetColor()), GetGValue(dlg.GetColor()), GetBValue(dlg.GetColor())); MessageBox(strMsg); } |
CColorDialog Ŭ·¡½ºÀÇ constructor Àμö´Â ¸ðµÎ »ý·« ÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, ¿©±â¿¡¼´Â Á¦1Àμö¿¡´Â Ãʱ⠻óÅ·Π¼±Åõǰí ÀÖ´Â »ö(»¡°) À» ÁöÁ¤ÇØ ÀÖ½À´Ï´Ù. ÀÌ ¿Ü Á¦2Àμö¿¡´Â Ç÷¡±×, Á¦3Àμö¿¡´Â ºÎ¸ð À©µµ¿ìÀÇ ÇÚµéÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
»ö ¼±Åà ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇϱâ À§Çؼ´Â DoModal()À» »ç¿ëÇÕ´Ï´Ù. [OK] ¹öưÀ» ´·¯ »ö ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ´Ý¾ÒÀ» °æ¿ì´Â, ¹Ýȯ °ªÀ¸·Î¼ IDOK°¡ [ĵ½½]À» ´·¯ ´Ý¾ÒÀ» °æ¿ì´ÂIDCANCELÀÌ µÇµ¹¾Æ ¿É´Ï´Ù.
IDOK°¡ ¹ÝȯµÈ °æ¿ì´Â GetColor()À» È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ ¼±ÅÃµÈ »öÀ» ÃëµæÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
CColorDialog Ŭ·¡½ºÀÇ base classÀÎ CColorDialogImplŬ·¡½º´Â ¸Þ¼¼Áö ¸ÊÀ» ÁغñÇØ ÀÖ½À´Ï´Ù. À̰ÍÀº ::RegisterWindowMessage(COLOROKSTRING)¿¡ ÀÇÇØ µî·ÏµÈ »ö ¼±Åà ´ÙÀ̾ó·Î±× Àü¿ëÀÇ ¸Þ¼¼Áö¸¦ ¸ÅÇÎ ÇÕ´Ï´Ù. CColorDialogImplŬ·¡½º´Â ÀÌ ¸Þ¼¼Áö ¸ÊÀ» ¹ÞÀ¸¸é °£Á¢ÀûÀ¸·Î OnColorOK()¶ó°í ÇÏ´Â ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. OnColorOK()´Â »ö ¼±Åà ´ÙÀ̾ó·Î±×ÀÇ
[OK] ¹öưÀ» ´·¶À» ¶§¿¡ ºÒ·ÁÁ® CColorDialogImplŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º´Â ÀÌOnColorOK()¸¦ ¿À¹ö¶óÀ̵å(override) Çϰųª ¸Þ¼¼Áö ¸ÊÀ» ÁغñÇÏ´Â °Í¿¡ ÀÇÇØ »ö ¼±Åà ´ÙÀ̾ó·Î±×ÀÇ µ¿ÀÛÀ» Ä¿½ºÅÒ¸¶ÀÌÁî ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯¸¦ ÁغñÇØ µ¶ÀÚÀûÀÎ »ö ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÀÌ »ö ¼±Åà ´ÙÀ̾ó·Î±×´Â Ãʱ⠻óÅ·Π[»öÀÇ ÀÛ¼º] ¿µ¿ªÀ» Ç¥½ÃÇØ ºÎ¸ð À©µµ¿ìÀÇ Áß¾Ó¿¡ Ç¥½ÃµË´Ï´Ù. ±×¸®°í [OK]¹öưÀ» ´©¸¥ ÈÄ ´ÙÀ̾ó·Î±×¸¦ ´Ý¾Ò´ÂÁö ¾î¶²ÁöÀÇ È®ÀÎ ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇÕ´Ï´Ù. ÀÌ ¿¹¿¡¼´Â CustomDlg.hÀ̶ó°í ÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁغñÇÏ¿© °Å±â¿¡ CustomDlgŬ·¡½º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.

|
// CustomDlg.h class CCustomDlg : public CColorDialogImpl<CCustomDlg> { public: // constructor¡¡ ¡¡ CCustomDlg(COLORREF
clrInit = 0, DWORD dwFlags
= 0) : CColorDialogImpl<CCustomDlg>(clrInit, dwFlags, NULL) { m_cc.Flags |= CC_FULLOPEN; } BEGIN_MSG_MAP_EX(CCustomDlg)
MSG_WM_INITDIALOG(OnInitDialog)
CHAIN_MSG_MAP(CColorDialogImpl<CCustomDlg>) END_MSG_MAP() LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){ CenterWindow(); return TRUE; } BOOL OnColorOK(){ int nRet = MessageBox(_T("»ö ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ´Ù¹°¾îµµ ÁÁ½À´Ï±î? "),
_T("È®ÀÎ"), MB_YESNO | MB_ICONQUESTION); // FALSE£º´Ù¹«´Â ,TRUE£º±×´ë·Î return (nRet == IDYES)
? FALSE : TRUE; } }; |
CCustomDlg ·¡½ºÀÇ constructorÀμö´Â CColorDialogŬ·¡½ºÀÇ constructor Àμö¸¦ Âü°í·Î Çϰí ÀÖ½À´Ï´Ù. constructor ³»¿¡¼´Â Ãʱ⠻óÅ·Π[»öÀÇ ÀÛ¼º] ¿µ¿ªÀ» Ç¥½ÃÇϱâ À§Çؼ CC_FULLOPEN Ç÷¡±×¸¦ Ãß°¡ÇÕ´Ï´Ù. OnInitDialog()¿¡¼ CenterWindow()¿¡ ÀÇÇØ ´ÙÀ̾ó·Î±×¸¦ Áß¾Ó¿¡ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù. OnColorOK()Àº [OK] ¹öưÀ» ´·¶À» ¶§¿¡ ºÒ·Á Áý´Ï´Ù. ¿©±â¿¡¼´Â È®ÀÎ¿ë ¸Þ½ÃÁö ¹Ú½º·Î Ç¥½ÃÇØ [³×]°¡ ¼±ÅõǾúÀ» °æ¿ì¿¡ »ö ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ´Ýµå·Ï Çϰí ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº CCustomDlgŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.
|
// stdafx.h #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> #include <atldlgs.h> // common dialog¸¦ »ç¿ëÇϱâ À§ÇØ(¶§¹®¿¡) |
|
// maindlg.h class CMainDlg : public CDialogImpl<CMainDlg> { public: enum { IDD = IDD_MAINDLG }; // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_ID_HANDLER_EX(IDC_BUTTON_OPENDLG, OnButtonOpenDlg)
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); return TRUE; } void OnButtonOpenDlg(UINT uNotifyCode,
int nID, HWND hWndCtl){ CCustomDlg dlg(RGB(255, 0, 0)); if(dlg.DoModal() == IDOK){
CString strMsg;
strMsg.Format(_T("R£º%d\nG£º%d\nB£º%d"),
GetRValue(dlg.GetColor()),
GetGValue(dlg.GetColor()),
GetBValue(dlg.GetColor()));
MessageBox(strMsg); } } void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){ EndDialog(nID); } void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){ EndDialog(nID); } }; |
|
// CommDlg.cpp #include "stdafx.h" #include "resource.h" #include "CustomDlg.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_OPENDLG |
¡¡´ÙÀ½¿¡ stdafx.h ¿¡¼´Â atldlgs.h Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.
¡¡CMainDlg Ŭ·¡½º¿¡¼´Â ¹öư¿ëÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯 OnButtonOpenDlg()¸¦ Ãß°¡ÇÏ¿© °Å±â¼ CCustomDlg Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇØ DoModal()¿¡ ÀÇÇØ µ¶ÀÚÀûÀÎ »ö ¼±Åà ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇÕ´Ï´Ù.
¡¡¸¶Áö¸·À¸·Î CommDlg.cpp ¾È¿¡¼ maindlg.h Çì´õÀÇ ¾Õ¿¡ CustomDlg.h Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.