【问题标题】:How to create shell styled title bar buttons in .NET如何在 .NET 中创建外壳样式的标题栏按钮
【发布时间】:2012-01-11 08:40:26
【问题描述】:

这是我之前的问题Draw Custom Buttons on Windows Vista/7 Aero Titlebar 的后续。

我最近重新审视了这个话题,发现this article 本质上是对启用 Aero 的标题栏(Windows Vista 和 7)上的“绘图”按钮的一种破解。代码所做的是在当前窗口上创建一个透明窗口并将按钮放置在上面,从而在标题栏上给人一种附加按钮的印象。唯一的问题是按钮看起来像普通的 WinForms 按钮!

我的问题是,我如何阅读 windows shell 样式(又名主题)以创建与控制框中的按钮样式类似的按钮(见图)

我希望答案在 .NET(VB.NET 或 C#)中。我可以接受非托管代码。

【问题讨论】:

    标签: c# .net vb.net winapi titlebar


    【解决方案1】:

    因此,如果我理解正确,您想了解 Windows 7 所称的当前主题的“窗口颜色”方面。

    根据 MSDN http://msdn.microsoft.com/en-us/magazine/cc163435.aspx,您需要 DwmGetColorizationColor:“检索用于 DWM 玻璃合成的当前颜色。此值基于当前配色方案。更改设置会导致 WM_WMCOLORIZATIONCOLORCHANGED 通知。”

    [DllImport("dwmapi.dll", PreserveSig = false)]
    public static extern void DwmGetColorizationColor(out int pcrColorization, [MarshalAs(UnmanagedType.Bool)]out bool pfOpaqueBlend);
    

    "你可以通过调用DwmGetColorizationColor函数来查看合成颜色和不透明度。如果这个函数成功,它将设置一个GDI+ ARGB颜色值和一个指示颜色是否不透明的布尔值。就像改变Aero方案一样在控制面板中,当合成颜色发生变化时会广播一条消息。发生这种情况时会发送 WM_DWMCOLORIZATIONCOLORCHANGED,但在这种情况下,参数会告诉您新的颜色和不透明度是什么。”

    【讨论】:

    • 感谢您的回复。虽然这不是我真正想要的,但它读得很好。我想做的是创建一个类似于控制框的按钮(最大、最小和关闭)。
    • 可能没有 API:这就是为什么我认为您可能必须阅读窗口颜色,然后使用窗口颜色作为提示绘制按钮。你能想出其他应用程序来做你想做的事情吗?
    • 是的。请参阅我在第一个问题 (stackoverflow.com/questions/4117874/…) 中添加的屏幕截图。 DisplayFusion,一个多桌面管理器能够做到这一点,具有发光效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2020-08-01
    相关资源
    最近更新 更多