2015-12-11 3 views
-2

Я назначаю член структуры MSGBOXPARAMSW (обратите внимание на W). Я хочу использовать один из предопределенных значков, например IDI_APPLICATION или IDI_WARNING, но все они ASCII (определены как MAKEINTRESOURCE). Я пробовал сделать это:Предопределенные значки Windows: Unicode

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

, но после этого никакая иконка не отображается вообще. Итак, как я могу использовать юникодные версии значков IDI_?

ответ

1

Нет идентификатора ANSI или Unicode идентификатора числового ресурса. Код, который вы используете для установки lpszIcon, верен. Идиоматично использовать макрос MAKEINTRESOURCE, а не литой, но актер имеет идентичный смысл. Ваша проблема заключается в другом коде, коде, который мы не видим.

Чтение между строками, я думаю, что вы нацеливаете ANSI или MBCS. Вы пытались использовать MAKEINTRESOURCE, но это расширилось до MAKEINTRESOURCEA. Вот что привело вас к броску. Вы должны были использовать MAKEINTRESOURCEW для соответствия MSGBOXPARAMSW. Это разрешило бы ошибку компиляции, с которой вы столкнулись. Вы могли бы также изменить проект для целевого UNICODE.

Но ничто из этого не объясняет, почему значок не появляется в диалоговом окне. Должна быть проблема в другом месте. Если появится диалоговое окно, наиболее вероятным объяснением является то, что вы установили hInstance на значение, отличное от NULL. Но код для установки lpszIcon правильный, хотя и не идиоматический.

Смежные вопросы