Windows FileOpenDialog возвращает неправильный путь - PullRequest
1 голос
/ 06 марта 2019

Я хочу иметь простой файловый диалог, в котором пользователь может выбрать папку, подобную следующей:

image

При выполнении следующего фрагмента кодав Windows 10 с текущей версией Visual Studio 2017 я столкнулся со странной проблемой.Что я делаю

  1. Создание новой папки в открытом файле. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. .Папка, я нажимаю «Выбрать папку».
  3. Вместо имени, которое я набрал для выбранной папки, pszFilePath будет «Новая папка».

Вместо этого я бы ожидал диалоговое окносначала удалить фокус из новой папки, когда я нажимаю «Выбрать папку», а затем мне нужен второй щелчок, чтобы фактически выбрать папку.

Как ни странно, этого не происходит во всех системах Windows 10.проверил этот код на.Иногда я не могу воспроизвести проблему.

Кто-то с той же проблемой и, возможно, обходной путь?

#include <shobjidl.h>
#include <windows.h>

void winOpenFileDialog ()
{
    HRESULT hr = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
    if (SUCCEEDED (hr))
    {
        IFileOpenDialog* pFileOpen;

        // Create the FileOpenDialog object.
        hr = CoCreateInstance (CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog,
            reinterpret_cast<void**> (&pFileOpen));

        if (SUCCEEDED (hr))
        {
            pFileOpen->SetOptions (FOS_PICKFOLDERS);
            // Show the Open dialog box.
            hr = pFileOpen->Show (NULL);

            FILEOPENDIALOGOPTIONS opt;
            pFileOpen->GetOptions (&opt);

            // Get the file name from the dialog box.
            if (SUCCEEDED (hr))
            {
                IShellItem* pItem;
                hr = pFileOpen->GetResult (&pItem);
                if (SUCCEEDED (hr))
                {
                    PWSTR pszFilePath;
                    hr = pItem->GetDisplayName (SIGDN_FILESYSPATH, &pszFilePath);

                    // Display the file name to the user.
                    if (SUCCEEDED (hr))
                    {
                        MessageBox (NULL, pszFilePath, L"File Path", MB_OK);
                        CoTaskMemFree (pszFilePath);
                    }
                    pItem->Release ();
                }
            }
            pFileOpen->Release ();
        }
        CoUninitialize ();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...