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

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

alt text http://img268.yfrog.com/img268/9271/filedialog.png

我不知道是否需要展示此类的方法实现(我在这里找到了这个项目),但如果这能帮助您,这是类的定义:
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;
};

我想在工作区下方的窗口中添加一个编辑控件,用于选择目录。最简单的实现方式是什么?

2个回答

5
如果您只想要一个编辑控件,允许用户输入目录条目的名称,那是可能的。您正在使用的C++类是Win32 SHBrowseForFolder()方法的包装器,该方法支持通过在BROWSEINFO结构体的ulFlags成员中设置BIF_EDITBOX(或更好的BIF_USENEWUI)来拥有编辑框。
查看C++类,似乎最简单的方法是在构造函数调用中将BIF_USENEWUI作为dwFlags成员传递。(虽然我倾向于直接调用SHBrowseForFolder而不需要使用C++类。)
请注意MSDN中关于此标志的警告:必须在使用此标志带来对话框之前调用OleInitialize()或CoInitialize()。
更一般地说,如果您想要一个编辑控件,您可以用它来进行自己的目的,允许用户输入任何内容,这就更有问题了:没有办法使用自定义控件扩展SHBrowseForFolder()使用的对话框。如果您想这样做,您将不得不重新实现整个对话框,这不是一个好主意。
最后,还要注意的是,如果您可以限制自己使用Vista(或更高版本),则有另一种选择目录选择对话框的方式:使用新的IFileDialog COM接口,并使用FOS_PICKFOLDERS标志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接