Не удается установить правильный значок в области уведомлений в Visual C++ с помощью LoadIcon()

Итак, у меня есть программа, которая не имеет консоли. Он запускается путем создания фиктивного HWND, который затем скрывается, а затем действует как приложение области уведомлений (остается в трее). Люди могут наводить курсор на программу, чтобы просмотреть ее состояние, и нажимать горячие клавиши для выполнения задач на экране.

В любом случае, я хочу отобразить значок моей программы в трее, но не могу. Я добавил ресурс значков в Visual Studio, и у моего исполняемого файла есть значок в проводнике. Ресурс имеет размеры от 16х16 до 256х256.

Теперь я установил для NOTIFYICONDATA информацию: nid.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));

и включил "resource.h"

Который определяет IDI_ICON1 как 104. Однако, когда я использую это, появляется синий значок точки объяснения (то есть один из окон по умолчанию). Я попытался IDI_ERROR, и значок ошибки появился нормально. Я попробовал пользовательский значок 12x12, так как считал, что размер может быть проблемой, но это тоже не сработало.

IDI_APPLICATION использует значок приложения по умолчанию, то есть значок.exe по умолчанию.

В настоящее время я не знаю, что попробовать или сделать.

Заранее спасибо за помощь!

1 ответ

Решение

В статье MSDN для LoadIcon() говорится о первом аргументе:

Дескриптор экземпляра модуля, исполняемый файл которого содержит значок для загрузки. Этот параметр должен быть НЕДЕЙСТВИТЕЛЕН, когда загружается стандартный значок.

Поскольку вы загружаете не стандартный значок, а свой собственный, вам необходимо предоставить действительный дескриптор модуля. Дескриптор модуля для вашего исполняемого файла может быть получен с передачей NULL в функцию GetModuleHandle(), поэтому код будет выглядеть так:

nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
Другие вопросы по тегам