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

时间:2014-02-23 14:56:03

标签: c++ icons system-tray notifyicon tray

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

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

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

并包含“resource.h”

将IDI_ICON1定义为104.但是当我使用它时,会显示蓝色解释点图标(即其中一个默认窗口)。我尝试了IDI_ERROR,错误图标显示正常。我尝试了一个自定义的12x12图标,因为我读取尺寸可能是问题,但也没有用。

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

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

LoadIcon()的MSDN文章说明了它的第一个论点:

  

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

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

nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));