Button 如何在Aero主题标题栏上绘制自定义按钮而不扩展非客户端区域?

Button 如何在Aero主题标题栏上绘制自定义按钮而不扩展非客户端区域?,button,windows-vista,aero,caption,Button,Windows Vista,Aero,Caption,我想知道在Vista或Win7中使用Aero主题时,如何在windows的标题栏上绘制自定义按钮。我需要在不更改原始代码的情况下将其应用于许多不同的应用程序,因此这将是一个钩子过程。由于无法更改原始代码,因此无法使用DwmExtendFrameIntoClientArea 我很确定这是可以做到的,或者至少伪装得很好,因为我见过一款可以做到这一点的应用程序。我在运行另一个应用程序时仔细查看了各种窗口,我不相信它们会改变窗口样式或将框架扩展到客户端区域 作为测试,我尝试使用WM_NCPAINT消息在

我想知道在Vista或Win7中使用Aero主题时,如何在windows的标题栏上绘制自定义按钮。我需要在不更改原始代码的情况下将其应用于许多不同的应用程序,因此这将是一个钩子过程。由于无法更改原始代码,因此无法使用DwmExtendFrameIntoClientArea

我很确定这是可以做到的,或者至少伪装得很好,因为我见过一款可以做到这一点的应用程序。我在运行另一个应用程序时仔细查看了各种窗口,我不相信它们会改变窗口样式或将框架扩展到客户端区域


作为测试,我尝试使用WM_NCPAINT消息在标题栏上绘制一些内容。当Aero主题处于活动状态时,我绘制的任何内容都不会显示。如果我得到了整个屏幕的DC,而不仅仅是窗口,那么我可以在标题栏上“绘制”,但当然,它实际上是在屏幕上绘制的。这种方法存在各种各样的问题,因此不起作用。如果有人有任何好的想法,甚至是好的提示,我会非常感谢你的帮助

由于无法扩展客户端区域,一种技术是创建一个浮动的
WS_EX__LAYERED
子窗口,所有者设置为顶层窗口,使其仅位于该窗口上方

您可以为
WM\u MOVE
WM\u SIZE
消息钩住目标窗口的WndProc