MFC CFileDialog не работает правильно в Windows 2000 - PullRequest
0 голосов
/ 20 декабря 2010

Я разрабатываю с Visual Studio 2008 (Windows 7) и использую

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

Важным параметром является третий (lastPath), чтобы попасть в определенный каталог! Все отлично работает с Windows 7, но в Windows 2000 диалог работает только в том случае, если lastPath (LPCTSTR lpszFileName) пусто (иначе диалоговое окно не открывается)

Есть идеи!?

Спасибо и приветствуем leon22

Ответы [ 2 ]

0 голосов
/ 19 апреля 2016
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 может работать find в win7 / win10, но может выбирать только файл, как CFileDialog. Выше показан мой обходной путь, я заставляю пользователя выбрать файл, заканчивающийся на szFilter, и используя CString :: Left, чтобы получить правильную папку.

0 голосов
/ 20 декабря 2010

Хорошо, я обнаружил ошибку:

не устанавливайте начальный каталог с lpszFileName!

Правильное использование:

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

приветствует leon22

...