< ÆÄÀÏ ¼±Åà ´ÙÀ̾ó·Î±× >

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 Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.