【问题标题】:How to draw Windows 7 taskbar like Shaded Buttons如何像阴影按钮一样绘制 Windows 7 任务栏
【发布时间】:2009-11-30 11:31:31
【问题描述】:

Windows 7 任务栏按钮绘制在阴影背景上。颜色阴影会以某种方式对鼠标悬停在按钮上的位置做出反应。

我想在我的应用程序中使用这些按钮。我该怎么做?

【问题讨论】:

  • 我认为它基本上是一个简单的径向渐变,随着鼠标指针移动。当鼠标靠近按钮顶部时,会涉及到第二个渐变。这是您想知道的,您是否更愿意寻找一个现成的类似任务栏的按钮? :)
  • 我刚刚检查过,顺便说一句,至少在启用 Aero 的情况下,按钮似乎不是窗口,整个按钮列表是一个窗口。这意味着按钮很可能是手动绘制的。然而,UISpy 会单独显示按钮(Windows UI 自动化)。
  • 感谢 OregonGhost。你说的对。整个 Windows 7 任务栏是一个单独的窗口。在 XP 中也是如此,尽管那里的窗口类不同。即使使用新的功能区也是如此:应用程序窗口的所有功能区都是“NetUIHWND”类型的一个窗口。我们为什么要做一个窗口管理器?

标签: c++ winapi visual-studio-2005 windows-7


【解决方案1】:

不妨试试

绘制主题背景

http://msdn.microsoft.com/en-us/library/bb773289(VS.85).aspx

给它 BS_PUSHBUTTON 常量。我在 Windows XP 中使用它来绘制毛绒蓝色 XP 主题控件,但在 Aero 中没有,但值得一试。

【讨论】:

  • 谢谢,虽然不是解决方案,但这是一个很好的提示。我有 2 或 3 个地方试图像我自己的对象一样绘制按钮。使用 DrawThemeBackground 我可以通过 Windows 以原始方式完成它。
【解决方案2】:

这种效果称为“彩色热轨”。似乎没有专门的 API。 developer blog 中有一些关于它的注释:

我从 Rudi Grobler 找到了一些源代码,虽然做了类似的事情:

Make your WPF buttons color hot-track!

【讨论】:

    【解决方案3】:

    我相信它们是作为 GPU 上的着色器程序实现的。只是一个简单的程序,它获取光标位置,并根据与该位置的距离计算每个像素的亮度。

    【讨论】:

    • 如果我没记错的话,它们在带有非 WDDM 驱动程序的 VM 中工作,因此应该还有一个软件算法。
    • 他们有吗?我认为当 Aero Glass 关闭时它们被禁用。无论如何,如果您在软件中执行该算法,则该算法是相同的。只是慢一点。
    【解决方案4】:

    它使用了新的动画api(Vista中存在一些,7中扩展)没有魔术样式可以设置,你仍然需要自己做画

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多