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

Ale*_*fie 5 .net c# vb.net winapi titlebar

这是我之前在Windows Vista/7 Aero Titlebar上绘制自定义按钮问题的后续内容.

我最近重新讨论了这个主题,并发现这篇文章基本上是在启用Aero的标题栏(Windows Vista和7)上"绘制"按钮的黑客.代码的作用是在当前窗口上创建一个透明窗口并将按钮放在其上,给标题栏上的其他按钮留下印象.唯一的问题是按钮看起来像常规的WinForms按钮!

我的问题是,我如何阅读windows shell样式(又名主题)才能创建与Control Box中的样式相同的按钮(见图)

我想答案是在.NET(VB.NET或C#).我可以使用非托管代码.

控制按钮

Jos*_*osh 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);
Run Code Online (Sandbox Code Playgroud)

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