3

我正在将旧的(Visual Studio 6.0)应用程序移植到 Visual Studio 2012 以添加一些增强功能。资源视图中的应用程序图标显然有 2 个版本的图标,一个 32x32 4bit 位图和一个 16x16 4bit 位图。

在主 AppDlg.cpp 中有 2 次调用SetIcon()如下(由 MFC 应用程序向导默认创建):

SetIcon(m_hIcon, TRUE);         // Set big icon
SetIcon(m_hIcon, FALSE);        // Set small icon 

但是,显示在应用程序对话框窗口左上角的图标是较大的,按比例缩小到 16x16,而不是小的图标。系统托盘中显示的图标也会发生这种情况。

在 Windows 资源管理器(详细视图/列表视图)中查看可执行文件时,它似乎使用了正确的小文件。所以在某些情况下它会选择小的。

如何让它为对话框和系统托盘的左上角选择较小的 16x16 图标?

4

1 回答 1

2

已知的微软错误。请参阅讨论。(如果您不想阅读,只需注释掉 SetIcon(m_hIcon, FALSE) 行就可以了)。请注意,SetIcon 仅设置对话框标题栏上的图标(小图标)以及使用 Alt-tab(大图标)时

您在 Windows 资源管理器中看到的图标是主要的应用程序图标(您的 rc 文件中 ID 最低的图标)。它与主对话框的 SetIcon() 方法无关

系统托盘中的图标完全不同。通常,您将使用 Shell_NotifyIcon API 来设置图标,但我敢打赌,您的项目将有一个设置图标的帮助程序类Chris Maunder 的CSystemTray是许多程序员使用的流行类。只需在您的程序中搜索 Shell_NotifyIcon 即可准确了解系统托盘图标所使用的资源

于 2012-12-10T05:22:38.063 回答