从什么时候开始,OPENFILENAME.lpstrDefExt支持超过三个字符的扩展名?

时间:2018-05-02 15:07:54

标签: winapi

OPENFILENAME structure状态的Windows API文档的当前版本(强调我的):

  

lpstrDefExt
  输入:LPCTSTR

     

默认扩展名。如果用户无法键入扩展名,GetOpenFileNameGetSaveFileName会将此扩展名附加到文件名。 此字符串可以是任意长度,但只会附加前三个字符。字符串不应包含句点(。)。如果此成员为NULL且用户未能键入扩展名,则不会附加扩展名。

这是不正确的,因为在Windows 10(Build 17134.5)上执行以下MVCE会显示:

#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支持三个以上字符的目标系统?

0 个答案:

没有答案