Не удается установить правильный значок в области уведомлений в 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));