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

|
CFolderDialog dlg(NULL,
_T("Æú´õ¸¦ ¼±ÅÃÇØ ÁÖ¼¼¿ä. ")); if(dlg.DoModal() == IDOK){ CString
strMsg; strMsg.Format(_T("Ç¥½Ã¸í£º%s\nÆÐ½º£º%s"), dlg.GetFolderDisplayName(), dlg.GetFolderPath()); MessageBox(strMsg); } |
CFolderDialogŬ·¡½ºÀÇ constructorÀμö´Â ¸ðµÎ »ý·« ÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸ , ¿©±â¿¡¼´Â Á¦1Àμö¿¡´Â ºÎ¸ð À©µµ¿ìÀÇ ÇÚµé, Á¦2Àμö¿¡´Â Æú´õ ¼±Åà ´ÙÀ̾ó·Î±×¿¡ Ç¥½ÃÇϴ ij¸¯ÅÍ ¶óÀÎÀ» ÁöÁ¤ÇØ ÀÖ½À´Ï´Ù. ÀÌ ¿Ü Á¦3Àμö¿¡´Â Ç÷¡±×¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Æú´õ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇϱâ À§Çؼ´Â DoModal()À» »ç¿ëÇÕ´Ï´Ù. [OK] ¹öưÀ» ´·¯ Æú´õ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ´Ý¾úÀ» °æ¿ì´Â ¹Ýȯ °ªÀ¸·Î¼
IDOK°¡, [ĵ½½]À» ´·¯ ´Ý¾ÒÀ» °æ¿ì´ÂIDCANCELÀÌ ¹Ýȯ µË´Ï´Ù.
IDOK°¡ ¹ÝȯµÈ °æ¿ì´Â CFileDialog Ŭ·¡½ºÀÇ ¸â¹öÀÎ m_szFolderPath°ú m_szFolderDisplayName¿¡ °¢°¢ Æú´õ ÆÐ½º¿Í Ç¥½Ã¸íÀÌ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù.
CFolderDialog Ŭ·¡½ºÀÇ base classÀÎ CFolderDialogImplŬ·¡½º´Â Äݹé ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. Äݹé ÇÔ¼ö´Â ¸Þ¼¼Áö¿¡ ÀÇÇØ ´ÙÀ½°ú °°Àº ¸Þ¼¼Áö Çڵ鷯¸¦ È£ÃâÇÕ´Ï´Ù.
|
¸Þ¼¼Áö |
¸Þ¼¼Áö Çڵ鷯 |
|
BFFM_INITIALIZED |
OnInitialized |
|
BFFM_SELCHANGED |
OnSelChanged |
|
BFFM_VALIDATEFAILED |
OnValidateFailed |
CFolderDialogImplŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º´Â ÀÌ·¯ÇÑ ¸â¹ö ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵å(override) ÇÏ´Â °Í¿¡ ÀÇÇØ Æú´õ ¼±Åà ´ÙÀ̾ó·Î±×ÀÇ µ¿ÀÛÀ» Ä¿½ºÅÒ¸¶ÀÌÁî ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº OnInitialized()À» ¿À¹ö¶óÀ̵å(override)ÇÏ¿© µ¶ÀÚÀûÀÎ Æú´õ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÀÌ Æú´õ ¼±Åà ´ÙÀ̾ó·Î±×´Â µðÆúÆ®·Î ÇöÀç µð·ºÅ丮¸¦ ¼±ÅÃÇÏ¸ç ºÎ¸ð À©µµ¿ìÀÇ Áß¾Ó¿¡ Ç¥½ÃµË´Ï´Ù. ÀÌ ¿¹¿¡¼´Â CustomDlg.hÀ̶ó°í ÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁغñÇÏ¿© °Å±â¿¡ CCustomDlg Ŭ·¡½º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
|
// CustomDlg.h class CCustomDlg : public CFolderDialogImpl<CCustomDlg> { public: // constructor¡¡ ¡¡ CCustomDlg(HWND
hWndParent = NULL, LPCTSTR lpstrTitle
= NULL,
UINT uFlags = BIF_RETURNONLYFSDIRS) : CFolderDialogImpl<CCustomDlg>(hWndParent, lpstrTitle, uFlags) {} void OnInitialized(){ CWindow wnd = m_hWnd; wnd.CenterWindow();
TCHAR szPath[_MAX_PATH]; GetCurrentDirectory(sizeof(szPath)/sizeof(TCHAR), szPath); SetSelection(szPath); } }; |
CCustomDlg Ŭ·¡½ºÀÇ constructorÀμö´Â CFolderDialogŬ·¡½ºÀÇ constructorÀμö¸¦ Âü°í·Î Çϰí ÀÖ½À´Ï´Ù. OnInitialized() ±×·³ ÃʱâÈ Ã³¸®¸¦ ÇÕ´Ï´Ù¸¸ ¿©±â¿¡¼´Â m_hWndÀ¸·ÎºÎÅÍ CWindow ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇØ CenterWindow()¿¡ ÀÇÇØ ´ÙÀ̾ó·Î±×¸¦ Áß¾Ó¿¡ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù. ¶ÇÇÑ ÇöÀç µð·ºÅ丮ÀÇ ÆÐ½º¸¦ ÃëµæÇØ SetSelection()¿¡ ÀÇÇØ ¼±ÅÃÇϰí ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº 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(NULL, _T("Æú´õ¸¦
¼±ÅÃÇØ ÁÖ¼¼¿ä. ")); if(dlg.DoModal() == IDOK){
CString strMsg;
strMsg.Format(_T("Ç¥½Ã¸í£º%s\nÆÐ½º£º%s"),
dlg.GetFolderDisplayName(), dlg.GetFolderPath());
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 Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.