我使用 Visual Studio 2008 (Windows 7) 开发并使用
CFileDialog(TRUE, NULL, lastPath, NULL, szFilter);
重要的参数是进入特定目录的第三个(lastPath)!在 Windows 7 上一切正常,但在 Windows 2000 中,对话框仅在 lastPath (LPCTSTR lpszFileName) 为空时才有效(否则对话框不会打开)
有任何想法吗!?
感谢和问候 leon22
我使用 Visual Studio 2008 (Windows 7) 开发并使用
CFileDialog(TRUE, NULL, lastPath, NULL, szFilter);
重要的参数是进入特定目录的第三个(lastPath)!在 Windows 7 上一切正常,但在 Windows 2000 中,对话框仅在 lastPath (LPCTSTR lpszFileName) 为空时才有效(否则对话框不会打开)
有任何想法吗!?
感谢和问候 leon22
好的,我发现了错误:
不要用 lpszFileName 设置初始目录!
正确用法:
CFileDialog oDlg(TRUE, NULL, NULL, NULL, szFilter);
oDlg.m_ofn.lpstrInitialDir = lastPath.GetBuffer(0); // set initial dir
迎接 leon22
CString szFilter = _T("hdc22_rx_keys_saved"); // 这样重加载文件类型时规避了异常
CFolderPickerDialog objFileDlg(
szFilter,/*LPCTSTR lpszFolder = NULL,*/
OFN_READONLY,/*DWORD dwFlags = 0,*/
NULL,/*CWnd* pParentWnd = NULL,*/
0/*DWORD dwSize = 0*/
);
if (objFileDlg.DoModal() == IDOK)
{
CString outputPath(objFileDlg.GetPathName());
//CString outputPath(objFileDlg.GetFolderPath());
if(!PathIsDirectory(outputPath))
{
//for XP which CFolderPickerDialog cannot work
outputPath = outputPath.Left(outputPath.ReverseFind('\\'));
}
if(!PathIsDirectoryEmpty(outputPath)){
//MessageBox(_T("请选择一个空的目录"));
_MSG_BOX_ERR(_T("[%s]不是一个存在的空目录"), outputPath);
return;
}
}
正如我调试的那样,CFolderPickerDialog可以在win7/win10中找到,但只能像CFileDialog一样选择文件。上面显示了我的解决方法,我让用户选择一个以 szFilter 结尾的文件,并使用 CString::Left 来获取正确的文件夹。