Как использовать IFileDialog с FOS_PICKFOLDER при отображении имен файлов в диалоге - PullRequest
13 голосов
/ 25 ноября 2011

Я пытаюсь использовать IFileDialog для выбора папки, и следующий код делает это просто отлично. Проблема в том, что я хотел бы видеть определенные типы файлов, а также папки во время просмотра (например, * .txt). Есть ли простой способ сделать это?

//g_path is a global which will contain the selected folders path
void PickContainer()
{
    IFileDialog *pfd;
    if (SUCCEEDED(CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd))))
    {
        DWORD dwOptions;
        if (SUCCEEDED(pfd->GetOptions(&dwOptions)))
        {
            pfd->SetOptions(dwOptions | FOS_PICKFOLDERS);
        }
        if (SUCCEEDED(pfd->Show(NULL)))
        {
            IShellItem *psi;
            if (SUCCEEDED(pfd->GetResult(&psi)))
            {
                if(!SUCCEEDED(psi->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &g_path)))
                {
                    MessageBox(NULL, "GetIDListName() failed", NULL, NULL);
                }
                psi->Release();
            }
        }
        pfd->Release();
    }
}

Ответы [ 2 ]

8 голосов
/ 25 ноября 2011

Как только вы выберете FOS_PICKFOLDERS, вы не увидите файлы в диалоговом окне, только папки. Если вы пропустите FOS_PICKFOLDERS, вы не сможете выбирать папки, только файлы. Стандартный диалог не поддерживает то, что вы спрашиваете. Вы могли бы написать свой собственный диалог, но я был бы склонен найти способ организовать ваше приложение, чтобы соответствовать поведению стандартного диалога.

5 голосов
/ 15 декабря 2011

К сожалению, сейчас это невозможно, и Microsoft, похоже, игнорирует запрос на функциональность: http://social.msdn.microsoft.com/Forums/en/windowsuidevelopment/thread/4a330e26-4d52-4fce-8a89-5c56fa132688

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...