我有应用程序图标的深色和浅色版本; 在类似 Windows XP 任务栏的灰色表面上,深色版本效果最佳,而浅色版本最适合作为标题栏中的图标。
是否有一种方法可以将任务栏中的图标设置为与 C#中我的窗体使用的图标不同的图标(P / Invoke 可行)?
我有应用程序图标的深色和浅色版本; 在类似 Windows XP 任务栏的灰色表面上,深色版本效果最佳,而浅色版本最适合作为标题栏中的图标。
是否有一种方法可以将任务栏中的图标设置为与 C#中我的窗体使用的图标不同的图标(P / Invoke 可行)?
使用不同的图标句柄将WM_SETICON消息发送到您的窗体,其中ICON_SMALL和ICON_BIG参数使用不同的图标句柄:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam);
private const uint WM_SETICON = 0x80u;
private const int ICON_SMALL = 0;
private const int ICON_BIG = 1;
public MyForm()
{
InitializeComponent();
SendMessage(this.Handle, WM_SETICON, ICON_SMALL, Properties.Resources.IconSmall.Handle);
SendMessage(this.Handle, WM_SETICON, ICON_BIG, Properties.Resources.IconBig.Handle);
}
我知道这是一个旧问题,但当我试图实现同样的事情时,我遇到了它,好吧,至少在Windows 7/8上你可以做到这一点。
原来ICO文件不仅包含一个图像,而是包含9个不同分辨率的图像:
在Windows 7和8上,任务栏使用64x64图像,而位于窗体左上角的图标使用16x16图像。
您可以使用类似Greenfish Icon Editor Pro(我不为他们工作或做任何事情,这不是广告!)的工具将其作为两个单独的图像,并像往常一样将此*.ico
文件添加到Visual Studio的Windows Form / WPF表单中。
最终结果如下所示:
正如您所看到的,我的WPF应用程序有两个独立的图标,一个在任务栏上,另一个在窗体上。