无法在 Visual C++ 中使用 LoadIcon() 设置正确的托盘图标

Mo *_*igi 1 c++ icons system-tray notifyicon tray

所以我有一个没有控制台的程序。它通过创建一个虚拟 HWND 来启动,然后隐藏该虚拟 HWND,然后充当通知区域应用程序(保留在托盘中)。人们可以将鼠标悬停在程序上查看其状态,并按热键在屏幕上执行任务。

无论如何,我想在托盘中显示我的程序图标但不能。我将图标资源添加到 Visual Studio,并且我的可执行文件在资源管理器中有一个图标。该资源的大小为 16x16 - 256x256。

现在,我将 NOTIFYICONDATA 的信息设置为: nid.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));

并包含“resource.h”

其中将 IDI_ICON1 定义为 104。但是,当我使用它时,会显示蓝色解释点图标(即 Windows 默认图标之一)。我尝试了 IDI_ERROR 并且错误图标显示正常。我尝试了自定义 12x12 图标,因为我读到尺寸可能是问题所在,但这也不起作用。

IDI_APPLICATION 使用应用程序的默认图标,即默认的.exe 图标。

我目前不知道要尝试什么或做什么。

在此先感谢您的帮助!

mik*_*dld 5

关于LoadIcon()的 MSDN 文章这样描述了它的第一个参数:

其可执行文件包含要加载的图标的模块实例的句柄。当加载标准图标时,该参数必须为NULL。

由于您没有加载标准图标,而是加载您自己的图标,因此您需要提供有效的模块句柄。NULL可以通过传递给GetModuleHandle()函数来检索可执行文件的模块句柄,因此代码如下所示:

nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
Run Code Online (Sandbox Code Playgroud)