我们遇到了一些涉及Windows 7为不同应用程序显示的任务栏图标的行为。我想知道是否有人可以对此有所了解:
我们希望A.exe和B.exe的任务栏上显示相同的图标 - 通过创建B.exe的快捷方式可以轻松实现这一点。但是,我真的想更多地了解正在发生的事情。
在尝试了解发生了什么时,我已经处理了B.exe中的WM_GETICON消息,根据GetSystemMetrics SM_CXICON / SM_CYICON或SM_CXSMALLICON / SM_CYSMALLICON大小给出的大小返回一个图标。但是,这似乎不会影响任务栏中显示的图标。
我也知道我们可以在B.exe中创建一个.ico文件,其中包含许多不同大小的图标 - 这可能会改善一些事情,但这是一个繁琐的解决方案!
有什么想法吗?
答案 0 :(得分:0)
刚刚通过以下简单方案遇到了这个问题(全部在win7上):
如果图标为C,则甚至无法通过以下代码进行更改:
const HANDLE bigicon = ::LoadImage(::GetModuleHandle(0), MAKEINTRESOURCE(IDI_TO_ICON), IMAGE_ICON, 256, 256, 0);
if (bigicon) {
::SendMessage(theMainWnd, WM_SETICON, ICON_BIG, (LPARAM)bigicon);
::SendMessage(GetWindow(theMainWnd, GW_OWNER), WM_SETICON, ICON_BIG, (LPARAM)bigicon);
}
const HANDLE smallicon = ::LoadImage(::GetModuleHandle(0), MAKEINTRESOURCE(IDI_TO_ICON_SMALL), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
if (smallicon) {
::SendMessage(theMainWnd, WM_SETICON, ICON_SMALL, (LPARAM)smallicon);
::SendMessage(GetWindow(theMainWnd, GW_OWNER), WM_SETICON, ICON_SMALL, (LPARAM)smallicon);
}