Имя файла по умолчанию выглядит усеченным в Windows IFileDialog - PullRequest
0 голосов
/ 12 февраля 2020

При использовании интерфейса Windows IFileDialog для запуска диалогового окна «Файловый браузер» я сталкиваюсь с проблемой, если имя файла по умолчанию превышает определенное количество символов.

Имя файла выглядит усеченным, хотя оно просто оборачивается так, что мы можем видеть только последние несколько символов. Кажется, проблема в диалоге файлового браузера Windows. Всякий раз, когда имя файла по умолчанию превышает 12-13 символов, оно оборачивается.

Кто-нибудь сталкивался с такой проблемой? Есть ли обходной путь?

Сведения об ОС:
Windows 10, версия 1709 (сборка ОС 16299.1625)

Снимок диалога: File browser dialog with wrapped default filename

Ниже приведен фрагмент кода:
Эта функция вызывается из приложения MF C, когда кнопка - «BrowseFile» нажата.

void CCustomFileBrowserNewDlg::OnBnClickedBrowseFile()
{
    IFileDialog* pfd = nullptr;
    IID id = CLSID_FileSaveDialog;

    const COMDLG_FILTERSPEC c_rgSaveTypes[] =
    {
        {L"Word Document (*.doc)",       L"*.doc"},
        {L"Web Page (*.htm; *.html)",    L"*.htm;*.html"},
        {L"Text Document (*.txt)",       L"*.txt"},
    };


    HRESULT hr = CoCreateInstance(id, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));
    if (SUCCEEDED(hr))
    {
        hr = pfd->SetFileTypes(ARRAYSIZE(c_rgSaveTypes), c_rgSaveTypes);
        if (SUCCEEDED(hr))
        {
            hr = pfd->SetFileTypeIndex(1);
            if (SUCCEEDED(hr))
            {
                //pfd->SetFileName(L"Filename.txt");       // This is okay
                pfd->SetFileName(L"SomeLongFilename.txt"); // This name gets wrapped around
                pfd->Show(::GetActiveWindow());
            }
        }

        pfd->Release();
    }
}

1 Ответ

0 голосов
/ 18 февраля 2020

Мало ошибок в вашем примере. В качестве примера вы указали диалоговое окно сохранения, а снимок экрана - диалоговое окно открытия.

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

enter image description here

Теперь ваша проблема заключается в c открытии диалога, и текст по умолчанию не усекает его скрытие влево из-за меньшего количества свободного места в том же самом линия. то есть, поскольку имя файла stati c text, поле управления редактированием текста по умолчанию и поле со списком фильтров находятся в одной строке, windows интерпретирует это как меньшее количество свободного места для текста по умолчанию и переносит текст влево. Если вы прокрутите текстовый курсор к управлению именем файла stati c, то вы получите полный текст. Вы можете поднять эту проблему до MSDN.

enter image description here

Теперь, обходной путь к вашей проблеме - показать диалог открытия файла в режиме максимизации. Один из способов сделать это - открыть диалоговое окно и развернуть его. В следующем режиме откроется диалоговое окно в режиме максимизации.

...