0

Visual Studio 2008 (Windows 7) で開発し、

CFileDialog(TRUE, NULL, lastPath, NULL, szFilter);

重要なパラメーターは、特定のディレクトリを取得するための 3 番目 (lastPath) です。Windows 7 ではすべて正常に動作しますが、Windows 2000 では、lastPath (LPCTSTR lpszFileName) が空の場合にのみダイアログが機能します (そうでない場合、ダイアログは開きません)。

何か案は!?

感謝と挨拶 leon22

4

2 に答える 2

0

わかりました、私はエラーを見つけました:

lpszFileNameで初期ディレクトリを設定しないでください!

正しい使用法:

CFileDialog oDlg(TRUE, NULL, NULL, NULL, szFilter);
oDlg.m_ofn.lpstrInitialDir = lastPath.GetBuffer(0); // set initial dir

leon22に挨拶

于 2010-12-20T14:02:14.337 に答える
0
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 を使用して正しいフォルダーを取得します。

于 2016-04-19T09:41:07.883 に答える