我有应用程序图标的深色和浅色版本;黑暗版本最适用于灰色表面,例如Windows XP任务栏,其中灯光版本最适合作为标题栏中的图标。
有没有办法可以将任务栏中的图标设置为与我在C#中使用的图标不同的图标(P / Invoke很好)?
答案 0 :(得分:15)
将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);
}
答案 1 :(得分:6)
我知道这是一个老问题,但我在尝试实现同样的目标时遇到了它,而且是的,你至少可以在Windows 7/8上做到这一点。
事实证明,ICO文件不仅包含一个图像,它包含9种不同分辨率的9种不同图像:
在Windows 7和8上,任务栏上使用64x64图像,图表上使用16x16图像,该图标位于表单的左上角。
您可以使用像Greenfish Icon Editor Pro这样的工具(我不适用于它们或任何东西,这不是插件!)将这些作为两个单独的图像,然后添加此*.ico
文件与Visual Studio中的Windows窗体/ WPF窗体一样正常。
最终结果如下所示:
正如您所看到的,我的WPF应用程序有两个单独的图标,一个在任务栏中,另一个在表单上。