ofn.lpstrFilter
不允许我在分机开头写下数字“3”?我需要使用哪种过滤器?
ofn.lpstrFilter = "text1 (*.txt)\0*.txt\03D text (*.txt)\0*.txt\0";
在上面的例子中,就在\0
之后,我正在使用3D
,但是lpstrFilter不允许我。为什么?我不想在它们之间使用空间。
输出应该是:
text1 (*.txt)
3D text (*.txt)
如果我在\0
和3D
之间使用空格,则输出为:
text1 (*.txt)
3D text (*.txt) // note one space is added before 3D
答案 0 :(得分:4)
这里的问题是你不小心使用了octal character constant。当您编写\03D...
时,您希望编译器将其解释为\0
3D...
。但是,编译器遵循规则并将其转换为\03
D...
。由于这不会产生NUL
字符,因此前面的*.txt
扩展名会延伸到下一个\0
字符。以下*.txt
扩展名现在被误解为显示字符串,它将很乐意显示在文件类型下拉列表中。
解决方案是拆分字符串并写下以下代码:
ofn.lpstrFilter = "text1 (*.txt)\0*.txt\0" "3D text (*.txt)\0*.txt\0";
这将正确终止\0
,并防止将以下数字字符解释为此转义序列的一部分。
顺便说一句,由于这是WinAPI代码,您应该使用TCHAR
而不是char
s。然后代码行如下所示:
ofn.lpstrFilter = _T( "text1 (*.txt)\0*.txt\0" ) _T( "3D text (*.txt)\0*.txt\0" );