如何在.NET中创建shell样式的标题栏按钮

时间:2011-12-02 09:32:33

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

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

我最近重新审视了这个主题并发现了this article,这实际上是在启用Aero的标题栏(Windows Vista& 7)上“绘制”按钮的黑客行为。代码的作用是在当前窗口上创建一个透明窗口并将按钮放在其上,给标题栏上的其他按钮留下印象。唯一的问题是按钮看起来像常规的WinForms按钮!

我的问题是,我如何阅读windows shell样式(又名主题)才能创建样式按钮,就像控制框中那样(见图像)

我希望得到.NET(VB.NET或C#)的答案。我可以使用非托管代码。

Control Buttons

1 个答案:

答案 0 :(得分:1)

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

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

[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,但在这种情况下,参数会告诉您新颜色和不透明度是什么。“