我正在分配lpszIcon
结构的MSGBOXPARAMSW
成员(请注意W
)。我想使用其中一个预定义的图标,如IDI_APPLICATION
或IDI_WARNING
,但它们都是ASCII(定义为MAKEINTRESOURCE
)。我试过这样做:
MSGBOXPARAMSW mbp = { 0 };
mbp.lpszIcon = (LPCWSTR) IDI_ERROR;
但是根本没有显示图标。那么如何使用IDI_
图标的unicode版本?
答案 0 :(得分:1)
没有数字资源ID的ANSI或Unicode变体。用于设置lpszIcon
的代码是正确的。使用MAKEINTRESOURCE
宏而不是强制转换是惯用的,但强制转换具有相同的含义。你的问题在于其他代码,我们看不到的代码。
在行间阅读,我认为您的目标是ANSI或MBCS。您尝试使用MAKEINTRESOURCE
但扩展为MAKEINTRESOURCEA
。这就是导致你施展的原因。您应该使用MAKEINTRESOURCEW
来匹配MSGBOXPARAMSW
。这将解决您遇到的编译错误。您同样可以将项目更改为目标UNICODE。
但这些都没有解释为什么图标没有出现在对话框中。其他地方一定存在问题。如果出现对话框,则最可能的解释是您已将hInstance
设置为NULL
以外的值。但设置lpszIcon
的代码是正确的,尽管不是惯用的。