我怎么添加一个编辑框MFC CFolderDialog("文件夹,浏览"对话)?
-
06-07-2019 - |
题
我现在有一个CFolderDialog类,采用的是我的CDocManagerEx类为处理文件的行动如下:
alt文本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;
};
我的目标的这个问题添加一个编辑控制的窗口,只是下面的工作空间的目录来选择。什么会是最简单的方法来完成这个吗?
解决方案
如果你只是想要一个编辑控制,允许用户类型中的名称一个目录中的条目,这是可能的。C++类您使用的是一个包装圆Win32SHBrowseForFolder()方法,该方法支持具有一个编辑框通过设置BIF_EDITBOX(或者更好,BIF_USENEWUI)在ulFlags员BROWSEINFO结构。
看C++类,看来最简单的方式来实现这一将是通过BIF_USENEWUI为dwFlags件中所构造的呼吁。(虽然我会被诱惑到刚才叫SHBrowseForFolder直接和不用C++类。)
不注意的警告,这标志在MSDN,但:OleInitialize()或用coinitialize()必须被称之为前提的对话与这个标志。
更一般地说,如果你想要一个编辑控制,你可以用你自己的目的,允许用户输入的任何东西,这就是更多的一个问题:有没有办法延长对话中使用通过SHBrowseForFolder()定制的控制。如果你要这么做,你会最终具有重新实现整个对话,这不是一个好主意。
此外,作为一个最后要注意,如果你可以限制自己Vista(外)然后,还有另一个办法有一个目录,选择对话:使用新的IFileDialog COM接口,与FOS_PICKFOLDERS标志。