Possible Duplicate:
How to escape or terminate an escape sequence in Cofn.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
最佳答案
这里的问题是您意外地使用了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
s而不是char
sofn.lpstrFilter = _T( "text1 (*.txt)\0*.txt\0" ) _T( "3D text (*.txt)\0*.txt\0" );