OPENFILENAME
structure状态的Windows API文档的当前版本(强调我的):
lpstrDefExt
输入:LPCTSTR
默认扩展名。如果用户无法键入扩展名,
GetOpenFileName
和GetSaveFileName
会将此扩展名附加到文件名。 此字符串可以是任意长度,但只会附加前三个字符。字符串不应包含句点(。)。如果此成员为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
支持三个以上字符的目标系统?