是否可以在 Windows 窗体的左上角显示与标准 16X16 像素图标形状不同的图标?
看来 Skype 的图标比标准的要宽得多:
是否可以在 Windows 窗体应用程序中使用?
你可以这样做,但它可能比拥有一个更大的图标更值得。
汉斯发表了一篇文章,大致指出了找出这个问题的答案所需的信息,但没有发布答案本身,所以我会澄清一下。
执行此操作的旧(Vista 之前)方法是覆盖WndProc
表单上的方法并处理WM_NCPAINT
消息。请注意,这意味着您现在负责绘制整个窗口框架(窗口边框、标题、关闭/恢复图标等......),而不仅仅是图标 - 即这是一个相对较小的事情要做很多努力.
较新的(Vista 后)方法是使用 DWM API - 请注意,此 API 不直接通过 .Net Framework 公开,因此您需要在 C# 中为此使用 P/Invoke。您要做的一点是标题为“在扩展框架窗口中绘图”的部分,您可以在其中将负责绘制的区域扩展到正常客户区域之外并进入窗口框架。这比以前少了麻烦(你不必画关闭按钮之类的东西),但仍然意味着你要对很多你通常不会做的事情负责,比如调整大小的命中盒测试和移动。
基本上它远没有提供更大的图标那么简单,对于大多数应用程序来说,它可能比它的价值要多得多,但是你可以在 C# 中做到这一点,如果你真的想尝试一下,那篇文章应该可以帮助你入门。
我知道您正在寻找一种简单的代码方式来执行此操作,但我邀请您查看 DevExpress 管理(是的,它是第三方,请原谅我),只需谷歌它.. 我看到了这个线程,我开始在 devexpress 上提出问题并获得支持和得到了一些您可能感兴趣的令人印象深刻的结果。
这是我放入的票... http://www.devexpress.com/Support/Center/Issues/ViewIssue.aspx?issueid=Q399941
到目前为止,我在 Xp、Vista 和 Windows 7 上使用它,仅使用 winforms 没有问题。
如果 Windows API 在不同版本的 Windows 上没有像您想要的那样显示出来,我希望这对您有所帮助或为您提供另一种选择。
谢谢,大卫
不要认为它是一个图标,如果你指的是ICO
图像格式。考虑到 Skype 窗口绝对是 ownerdraw 窗口,该图像可能是您想要的任何格式。
诀窍基本上是渲染图像,跳过“图标”的某种颜色(背景颜色)的像素,因此以“透明度”渲染它。
这篇文章可以给你一个提示:
它很旧,但总是很好。
是的。覆盖 WndProc 并实现 WM_NCPAINT。