< ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±× >
WTLÀº common dialogÀÇ ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ CFileDialogImplÀ̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º´Â ATLÀÇ CDialogImpl Ŭ·¡½º¿Í °°ÀÌ base class·Î¼ÀÇ º¸°í »ç¿ëÇÕ´Ï´Ù. atldlgs.h Çì´õ¿¡¼´Â CFileDialogImpl Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º·Î¼ CFileDialog Ŭ·¡½º°¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù.
|
// atldlgs.h class CFileDialog : public CFileDialogImpl<CFileDialog> { ... ... |
CFileDialog Ŭ·¡½º´Â [ÆÄÀÏÀ» ¿©´Â] ´ÙÀ̾ó·Î±×¿Í [À̸§À» ºÙ¿© º¸Á¸] ´ÙÀ̾ó·Î±×¸¦ ¼Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù.
¡¡WTLÀÇ CFileDialog Ŭ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í µ¿µîÀÇ ±â´ÉÀ» °®Ãß°í ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CFileDialog Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ ÀÔ´Ï´Ù. µ¡ºÙ¿© WTLÀÇ common dialog Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ´Â atldlgs.h Çì´õ¸¦ Æ÷ÇÔ ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

|
// [ÆÄÀÏÀ» ¿©´Â]´ÙÀ̾ó·Î±× CFileDialog dlg(TRUE,
_T("txt"), NULL, OFN_HIDEREADONLY | OFN_CREATEPROMPT, _T("ÅØ½ºÆ® ÆÄÀÏ
(*.txt)\0*.txt\0¸ðµç ÆÄÀÏ (*.*)\0*.*\0\0")); if(dlg.DoModal() == IDOK){ CString
strMsg; strMsg.Format(_T("ÆÄÀÏ¸í£º%s\nÆÄ½º£º%s"), dlg.m_szFileTitle, dlg.m_szFileName); MessageBox(strMsg); } |
|
// [À̸§À» ºÙ¿© º¸Á¸]´ÙÀ̾ó·Î±× CFileDialog dlg(FALSE,
_T("txt"), _T("¹«Á¦"), OFN_OVERWRITEPROMPT, _T("ÅØ½ºÆ® ÆÄÀÏ
(*.txt)\0*.txt\0¸ðµç ÆÄÀÏ (*.*)\0*.*\0\0")); if(dlg.DoModal() == IDOK){ CString
strMsg; strMsg.Format(_T("ÆÄÀÏ¸í£º%s\nÆÐ½º£º%s"), dlg.m_szFileTitle, dlg.m_szFileName); MessageBox(strMsg); } |
CFileDialog Ŭ·¡½ºÀÇ constructorÀÇ Á¦1Àμö¿¡´ÂBOOL°ªÀ» ÁöÁ¤ÇÕ´Ï´Ù. TRUEÀÇ °æ¿ì´Â [ÆÄÀÏÀ» ¿©´Â] ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇϸç, FALSEÀÇ °æ¿ì´Â [À̸§À» ºÙ¿© º¸Á¸] ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ³ª¸ÓÁöÀÇ Àμö´Â »ý·« °¡´ÉÇÏ¸ç ¼ø¼¿¡ µðÆúÆ® È®ÀåÀÚ(extension), µðÆúÆ® ÆÄÀϸí , Ç÷¡±× , ÇÊÅÍ , ºÎ¸ð À©µµ¿ìÀÇ ÇÚµéÀÔ´Ï´Ù.
ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇϱâ À§Çؼ´Â DoModal()À» »ç¿ëÇÕ´Ï´Ù. [¿©´Â](¶Ç´Â[º¸Á¸]) ¹öưÀ» ´·¯ ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ´Ù¹°¾úÀ» °æ¿ì´Â ¹Ýȯ °ªÀ¸·Î¼
IDOK°¡, [ĵ½½]À» ´·¯ ´Ý¾ÒÀ» °æ¿ì´ÂIDCANCELÀÌ µÇµ¹¾Æ ¿É´Ï´Ù.
IDOKÇØ¼ µÇµ¹¾Æ ¿ÔÀ» °æ¿ì´Â CFileDialog Ŭ·¡½ºÀÇ ¸â¹öÀÎ m_szFileTitle°úm_szFileName¿¡ °¢°¢ ÆÄÀϸí°ú ÆÄÀÏ ÆÐ½º°¡ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù.
CFileDialog Ŭ·¡½ºÀÇ base classÀÎ CFileDialogImplŬ·¡½º´Â ¸Þ¼¼Áö ¸ÊÀ» ÁغñÇØ ÀÖ½À´Ï´Ù. À̰ÍÀº ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¿ëÀÇ WM_NOTIFY ¸Þ¼¼Áö¸¦ ¸ÅÇÎ ÇÕ´Ï´Ù. ¸Þ¼¼Áö ¸ÊÀº WM_NOTIFY
¸Þ¼¼ÁöÀÇ ÅëÁö Äڵ忡 ÀÇÇØ °£Á¢ÀûÀ¸·Î ´ÙÀ½°ú °°Àº ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.
|
ÅëÁö ÄÚµå |
¸â¹ö ÇÔ¼ö¸í |
|
CDN_FILEOK |
OnFileOK |
|
CDN_FOLDERCHANGE |
OnFolderChange |
|
CDN_HELP |
OnHelp |
|
CDN_INITDONE |
OnInitDone |
|
CDN_SELCHANGE |
OnSelChange |
|
CDN_SHAREVIOLATION |
OnShareViolation |
|
CDN_TYPECHANGE |
OnTypeChange |
CFileDialogImpl Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º´Â ÀÌ·¯ÇÑ ¸â¹ö ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵å(override) ÇÏ´Â °Í¿¡ ÀÇÇØ ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×ÀÇ µ¿ÀÛÀ» Ä¿½ºÅÒ ¸¶ÀÌÁî ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº OnInitDone()À̶ó´Â OnHelp()¸¦ ¿À¹ö¶óÀ̵å(override) ÇÏ¿© µ¶ÀÚÀûÀÎ ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÀÌ ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¿¡´Â [ÇïÇÁ] ¹öưÀÌ Ãß°¡µÇ¾î ºÎ¸ð À©µµ¿ìÀÇ Áß¾Ó¿¡ Ç¥½ÃµË´Ï´Ù. ÀÌ ¿¹¿¡¼´Â CustomDlg.hÀ̶ó°í ÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁغñÇÏ°í °Å±â¿¡ CCustomDlgŬ·¡½º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.

|
// CustomDlg.h class CCustomDlg : public CFileDialogImpl<CCustomDlg> { public: // constructor¡¡ ¡¡ CCustomDlg(BOOL
bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL, DWORD
dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
HWND hWndParent = NULL) : CFileDialogImpl<CCustomDlg>(bOpenFileDialog,
lpszDefExt, lpszFileName,
dwFlags, lpszFilter, hWndParent) { // [ÇïÇÁ]¹öưÀ» Ç¥½ÃÇϱâ À§ÇؼOFN_SHOWHELPÇ÷¡±×
Ãß°¡ m_ofn.Flags |= OFN_SHOWHELP; } void OnInitDone(LPOFNOTIFY lpon){ // ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ Ä£À©µµ¿ìÀÇ
Áß½ÉÀ¸·Î Ç¥½Ã GetFileDialogWindow().CenterWindow(); } void OnHelp(LPOFNOTIFY lpon){ // ÇöÀç ¿·Á ÀÖ´Â Æú´õ ÆÐ½º¸¦ Ãëµæ
TCHAR szPath[_MAX_PATH]; GetFolderPath(szPath, sizeof(szPath)/sizeof(TCHAR)); CString strMsg; strMsg.Format(_T("ÇöÀçÀÇ Æú´õ´Â
%s ÀÔ´Ï´Ù. "), szPath); MessageBox(strMsg); } }; |
CCustomDlg Ŭ·¡½ºÀÇ constructorÀμö´Â CFileDialog Ŭ·¡½ºÀÇ constructorÀμö¸¦ Âü°í·Î Çϰí ÀÖ½À´Ï´Ù. constructor³»¿¡¼´Â ÆÄÀÏ
¼±Åà ´ÙÀ̾ó·Î±×¿¡
[ÇïÇÁ] ¹öưÀ» Ãß°¡Çϱâ À§Çؼ OFN_SHOWHELPÇ÷¡±×¸¦ Ãß°¡ÇÕ´Ï´Ù. OnInitDone()¿¡¼ ÃʱâÈ Ã³¸®¸¦ ÇÕ´Ï´Ù¸¸ ¿©±â¿¡¼´Â GetFileDialogWindow()¿¡ ÀÇÇØ ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×ÀÇ À©µµ¿ì ¿ÀºêÁ§Æ®¸¦ ÃëµæÇÏ¿© CenterWindow()¿¡ ÀÇÇØ ´ÙÀ̾ó·Î±×¸¦ Áß¾Ó¿¡ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù. OnHelp()Àº [ÇïÇÁ] ¹öưÀ» ´·¶À» ¶§¿¡ ºÒ·ÁÁý´Ï´Ù. ¿©±â¿¡¼´Â ÇöÀç ¿·Á ÀÖ´Â Æú´õ ÆÐ½º¸¦ ¸Þ½ÃÁö ¹Ú½º·Î Ç¥½ÃÇϰí ÀÖÀ» »ÓÀÔ´Ï´Ù.
¡¡´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº 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(FALSE,
_T("txt"), _T("¹«Á¦"), OFN_OVERWRITEPROMPT,
_T("ÅØ½ºÆ® ÆÄÀÏ (*.txt)\0*.txt\0¸ðµç ÆÄÀÏ (*.*)\0*.*\0\0")); if(dlg.DoModal() == IDOK){
CString strMsg;
strMsg.Format(_T("ÆÄÀÏ¸í£º%s\nÆÐ½º£º%s"),
dlg.m_szFileTitle, dlg.m_szFileName);
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 Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù. atldlgs.h Çì´õ¿¡´Â common dialog¿ë Ŭ·¡½º°¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù.
¡¡CMainDlg Ŭ·¡½º¿¡¼´Â ¹öư¿ëÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯 OnButtonOpenDlg()¸¦ Ãß°¡ÇÏ¿© °Å±â¼ CCustomDlg Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇØ DoModal()¿¡ ÀÇÇØ µ¶ÀÚÀûÀÎ ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇÕ´Ï´Ù.
¡¡¸¶Áö¸·À¸·Î CommDlg.cpp ¿¡¼ maindlg.h Çì´õÀÇ ¾Õ¿¡ CustomDlg.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.