С каких пор OPENFILENAME.lpstrDefExt поддерживает расширения, содержащие более трех символов? - PullRequest
0 голосов
/ 02 мая 2018

Текущая версия документации Windows API со структурой OPENFILENAME (выделено мной):

lpstrDefExt
Тип: LPCTSTR

Расширение по умолчанию. GetOpenFileName и GetSaveFileName добавляют это расширение к имени файла, если пользователь не может набрать расширение. Эта строка может быть любой длины, но добавляются только первые три символа. Строка не должна содержать точку (.). Если этот элемент NULL и пользователь не может набрать расширение, расширение не добавляется.

Это неверно, так как выполнение следующего MVCE в Windows 10 (сборка 17134.5) показывает:

#include <stdio.h>
#include <Windows.h>

int main()
{
    wchar_t filename[256] = { 0 };

    OPENFILENAMEW ofn =
    {
        .lStructSize = sizeof(OPENFILENAMEW),
        .lpstrFilter = L"All Files\0*.*\0\0",
        .lpstrFile = filename,
        .nMaxFile = sizeof(filename),
        .lpstrDefExt = L"xlsx"
    };

    BOOL ret = GetSaveFileNameW(&ofn);

    if (ret != 0)
    { 
        wprintf(L"%s\r\n", filename);
    }
}

Ввод test в диалоговом окне Сохранить файл приводит к C:\Users\...\Documents\test.xlsx, а не C:\Users\...\Documents\test.xls, как утверждается в документации.

Когда это изменилось, то есть, на какие целевые системы можно положиться на lpstrDefExt с поддержкой более трех символов?

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