Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将不同的任务栏图标设置为标题栏中显示的图标(C#)?_C#_Winforms_Icons - Fatal编程技术网

将不同的任务栏图标设置为标题栏中显示的图标(C#)?

将不同的任务栏图标设置为标题栏中显示的图标(C#)?,c#,winforms,icons,C#,Winforms,Icons,我有我的应用程序图标的黑暗和光明版本;深色版本最适用于Windows XP任务栏等灰色表面,而浅色版本最适用于标题栏中的图标 有没有一种方法可以将任务栏中的图标设置为与我在C#中表单中使用的图标不同的图标(p/Invoke很好)?我知道这是一个老问题,但我在尝试实现同样的目标时遇到了它,是的,至少在Windows 7/8上你可以这样做 事实证明,ICO文件不仅包含一个图像,还包含9个不同分辨率的9个不同图像: 16x16 24x24 32x32 48x48 64x64 72x72 80x80

我有我的应用程序图标的黑暗和光明版本;深色版本最适用于Windows XP任务栏等灰色表面,而浅色版本最适用于标题栏中的图标


有没有一种方法可以将任务栏中的图标设置为与我在C#中表单中使用的图标不同的图标(p/Invoke很好)?

我知道这是一个老问题,但我在尝试实现同样的目标时遇到了它,是的,至少在Windows 7/8上你可以这样做

事实证明,ICO文件不仅包含一个图像,还包含9个不同分辨率的9个不同图像:

  • 16x16
  • 24x24
  • 32x32
  • 48x48
  • 64x64
  • 72x72
  • 80x80
  • 96x96
  • 128x128
在Windows 7和8上,64x64图像用于任务栏,16x16图像用于表单左上角的图标

您可以使用这样的工具(我不为他们工作或做任何事情,这不是一个插件!)将它们作为两个独立的图像,然后在Visual Studio中将此
*.ico
文件添加到您的Windows窗体/WPF窗体中

最终结果如下所示:


正如您所见,我的WPF应用程序有两个独立的图标,一个在任务栏上,另一个在表单上。

使用图标小参数和图标大参数的不同图标手柄将WM\u设置图标消息发送到表单:

[DllImport(“user32.dll”,CharSet=CharSet.Auto)]
静态外部IntPtr SendMessage(IntPtr hWnd、uint Msg、int wParam、IntPtr lParam);
专用consuint WM_SETICON=0x80u;
私有常量int ICON_SMALL=0;
私有常量int图标_BIG=1;
公共MyForm()
{
初始化组件();
SendMessage(this.Handle、WM_SETICON、ICON_SMALL、Properties.Resources.IconSmall.Handle);
SendMessage(this.Handle、WM_SETICON、ICON_BIG、Properties.Resources.IconBig.Handle);
}

它们都是独立的项目,还是一个项目,您想通过编程进行设置?这是同一个项目(相同的形式),我想通过编程进行设置。我在.Net 4.0中读到了一些关于“Window.TaskbarItemInfo”的内容。也许可以通过overlay属性来实现这一点。我会得到一个更好的图标,它在明暗两种情况下都很好看。只是因为你不能保证你的用户的颜色偏好。您如何知道用户正在使用stock xp主题?您是如何解决此问题的?嗯,.ico文件中可能有任意数量的图标。此外,此解决方案可能有效,但实际上并不可行。另外:Windows不一定使用64x64图标来显示任务栏图标。在具有默认dpi设置的典型系统上,32x32图标可以工作。对于更高的dpi比例,Windows将在标题栏和任务栏上使用不同的图标大小。此外,如果在将图标设置为窗体图标之前对其进行了修改(例如将32x32图标调整为16x16,质量比默认大小调整器更好),则可能会丢失原始图标文件中包含的所有其他大小@Andreasader的答案绝对是回答所问问题的最佳答案。此外,如果您选中“任务栏->使用小任务栏按钮”设置,windows也将使用16x16图标。答案很好+1当然!你能给我更多的信息吗?我不知道如何应用这个解决方案