如何将编辑框添加到MFC CFolderDialog(“浏览文件夹”对话框)?

如何将编辑框添加到MFC CFolderDialog(“浏览文件夹”对话框)?,mfc,dialog,folderbrowserdialog,Mfc,Dialog,Folderbrowserdialog,我目前有一个CFolderDialog类,它在我的CDocManagerEx类中用于处理文件操作,如下所示: 我不知道是否需要显示该类的方法实现(我从发布的项目中发现),但下面是类定义(如果有帮助): class CFolderDialog { friend static int CALLBACK BrowseDirectoryCallback( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData); public

我目前有一个CFolderDialog类,它在我的CDocManagerEx类中用于处理文件操作,如下所示:

我不知道是否需要显示该类的方法实现(我从发布的项目中发现),但下面是类定义(如果有帮助):

class CFolderDialog  
{
    friend static int CALLBACK BrowseDirectoryCallback(
        HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData);

public:
    CFolderDialog(  LPCTSTR lpszFolderName = NULL, 
        DWORD dwFlags = NULL/*BIF_RETURNONLYFSDIRS*/, 
        CWnd* pParentWnd = NULL);
    virtual ~CFolderDialog();
    virtual int DoModal();
    CString GetPathName() const;

protected:
    virtual void OnInitDialog();
    virtual void OnSelChanged(ITEMIDLIST* pIdl);
    virtual void CallbackFunction(HWND hWnd, UINT uMsg, LPARAM lParam);

    void EnableOK(BOOL bEnable = TRUE);
    void SetSelection(LPCTSTR pszSelection);
    void SetSelection(ITEMIDLIST* pIdl);
    void SetStatusText(LPCTSTR pszStatusText);
    CString ShortName(const CString& strName);

public:
    BROWSEINFO m_bi;

protected:
    CString m_strInitialFolderName;
    CString m_strFinalFolderName;

    TCHAR m_szDisplayName[MAX_PATH];
    TCHAR m_szPath[MAX_PATH];

    HWND m_hDialogBox;
};

class CMyFolderDialog : public CFolderDialog  
{
public:
    CMyFolderDialog(LPCTSTR lpszFolderName = NULL, 
        DWORD dwFlags = NULL, 
        CWnd* pParentWnd = NULL,
        LPCTSTR pszFileFilter = NULL);
    virtual ~CMyFolderDialog();
protected:
    virtual void OnSelChanged(ITEMIDLIST* pIdl);

protected:
    CString m_strFileFilter;
};

这个问题的目标是在选定目录的工作区下方的窗口中添加一个编辑控件。实现这一点最简单的方法是什么?

也许本文中的一些想法可以满足您的需求

还是这个


如果您只需要一个允许用户键入目录项名称的编辑控件,这是可能的。您使用的C++类是Win32 SubReSuffFrEdle()方法的包装器,该方法通过在BuffSeNeq结构的ULFLAGS成员中设置BIFOxEdEdTabor(或更好,BiffuSeNeWUI)来支持编辑框。

查看C++类,看起来最简单的实现方法是将BiffuSeNEWUI作为构造函数调用中的DWFLAGS成员。(虽然我很想直接调用SubReSfFraseFrand,而不必担心C++类。)< /P> 请注意MSDN中有关此标志的警告,不过:在使用此标志打开对话框之前,必须先调用OleInitialize()或CoInitialize()

更一般地说,如果您想要一个可用于自己目的的编辑控件,允许用户输入任何内容,那么问题就更大了:无法使用自定义控件扩展SHBrowseForFolder()使用的对话框。如果您想这样做,您将不得不重新实现整个对话框,这不是一个好主意

另外,作为最后一点,如果您可以将自己限制在Vista(及更高版本)上,那么还有另一种方法可以创建目录选择对话框:使用带有FOS_PICKFOLDERS标志的新IFileDialog COM界面