2011-12-02 49 views
5

这是我早期问题Draw Custom Buttons on Windows Vista/7 Aero Titlebar的后续操作。如何在.NET中创建壳式标题栏按钮

最近我重新讨论了这个话题,发现this article这实际上是对启用了Aero的标题栏(Windows Vista & 7)上的“绘图”按钮的破解。代码的作用是在当前窗口上创建一个透明窗口并将按钮放置在窗口上,从而在标题栏上留下更多按钮的印象。唯一的问题是按钮看起来像普通的WinForms按钮!

我的问题是,我如何阅读windows shell风格(又名主题),以创建按钮样式,就像控制箱中的那些风格(见图)

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

Control Buttons

回答

1

所以,如果我理解正确的话,你想读什么样的Windows 7调用当前主题的“窗口颜色”方面。

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

+0

感谢您的回复。尽管这不是我真正想要的,但它做出了很好的阅读。我想要做的是创建一个类似于控制盒的按钮(max,min&close)。 –

+0

有可能没有API:这就是为什么我想你可能不得不阅读窗口颜色,然后使用窗口颜色作为提示绘制按钮。你能想到任何其他应用程序可以做你想做的事吗? – Josh

+0

是的。查看我在第一个问题中添加的屏幕截图(http://stackoverflow.com/questions/4117874/draw-custom-buttons-on-windows-vista-7-aero-titlebar)。 DisplayFusion,一个多桌面管理器能够做到这一点,所有的发光效果。 –