预定义的Windows图标:Unicode

时间:2015-12-11 22:35:46

标签: winapi

我正在分配lpszIcon结构的MSGBOXPARAMSW成员(请注意W)。我想使用其中一个预定义的图标,如IDI_APPLICATIONIDI_WARNING,但它们都是ASCII(定义为MAKEINTRESOURCE)。我试过这样做:

MSGBOXPARAMSW mbp = { 0 };
mbp.lpszIcon = (LPCWSTR) IDI_ERROR;

但是根本没有显示图标。那么如何使用IDI_图标的unicode版本?

1 个答案:

答案 0 :(得分:1)

没有数字资源ID的ANSI或Unicode变体。用于设置lpszIcon的代码是正确的。使用MAKEINTRESOURCE宏而不是强制转换是惯用的,但强制转换具有相同的含义。你的问题在于其他代码,我们看不到的代码。

在行间阅读,我认为您的目标是ANSI或MBCS。您尝试使用MAKEINTRESOURCE但扩展为MAKEINTRESOURCEA。这就是导致你施展的原因。您应该使用MAKEINTRESOURCEW来匹配MSGBOXPARAMSW。这将解决您遇到的编译错误。您同样可以将项目更改为目标UNICODE。

但这些都没有解释为什么图标没有出现在对话框中。其他地方一定存在问题。如果出现对话框,则最可能的解释是您已将hInstance设置为NULL以外的值。但设置lpszIcon的代码是正确的,尽管不是惯用的。