gpt4 book ai didi

mfc - 如何将编辑框添加到 MFC CFolderDialog ("browse for folder"对话框)?

转载 作者:行者123 更新时间:2023-12-01 12:01:22 26 4
gpt4 key购买 nike

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

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

我不知道是否需要显示此类的方法实现(我从发布的项目 here 中找到它),但如果有帮助,这里是类定义:

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 SHBrowseForFolder() 方法的包装器,该方法支持通过在 BROWSEINFO 结构的 ulFlags 成员中设置 BIF_EDITBOX(或更好的 BIF_USENEWUI)来拥有编辑框。

查看 C++ 类,看起来实现此目的的最简单方法是在构造函数调用中将 BIF_USENEWUI 作为 dwFlags 成员传递。 (尽管我很想直接调用 SHBrowseForFolder 而不必理会 C++ 类。)

不过请注意 MSDN 中有关此标志的警告:在使用此标志打开对话框之前必须调用 OleInitialize() 或 CoInitialize()。

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

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

关于mfc - 如何将编辑框添加到 MFC CFolderDialog ("browse for folder"对话框)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com