Итак, у меня есть программа, которая не имеет консоли. Он запускается путем создания фиктивного HWND, который затем скрывается, а затем действует как приложение области уведомлений (остается в трее). Люди могут наводить курсор на программу, чтобы просмотреть ее состояние, и нажимать горячие клавиши для выполнения задач на экране.
В любом случае, я хочу отобразить значок моей программы в трее, но не могу. Я добавил ресурс значков в Visual Studio, и у моего исполняемого файла есть значок в проводнике. Ресурс имеет размеры от 16х16 до 256х256.
Теперь я установил для NOTIFYICONDATA информацию:
nid.hIcon = LoadIcon (NULL, MAKEINTRESOURCE (IDI_ICON1));
и включил «resource.h»
Который определяет IDI_ICON1 как 104. Однако, когда я использую это, появляется синий значок точки объяснения (то есть один из окон по умолчанию). Я попытался IDI_ERROR, и значок ошибки появился нормально. Я попробовал пользовательский значок 12×12, так как считал, что размер может быть проблемой, но это тоже не сработало.
IDI_APPLICATION использует значок приложения по умолчанию, то есть значок .exe по умолчанию.
В настоящее время я не знаю, что попробовать или сделать.
Заранее спасибо за помощь!
Статья MSDN для LoadIcon () говорит это о своем первом аргументе:
Дескриптор экземпляра модуля, чей исполняемый файл содержит значок для загрузки. Этот параметр должен быть НЕДЕЙСТВИТЕЛЕН, когда загружается стандартный значок.
Поскольку вы загружаете не стандартный значок, а свой собственный, вам необходимо предоставить действительный дескриптор модуля. Дескриптор модуля для вашего исполняемого файла может быть получен с передачей NULL
в GetModuleHandle () функция, поэтому код будет выглядеть так:
nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
Других решений пока нет …