如何在不扩展非客户区域的情况下在Aero主题标题栏上绘制自定义按钮?

时间:2010-07-14 01:04:18

标签: button windows-vista aero caption

我正在尝试弄清楚如何在Vista或Win7中使用Aero主题时在窗口的标题栏上绘制自定义按钮。我需要将其应用于许多不同的应用程序而不更改原始代码,因此这将在钩子过程中。由于我无法更改原始代码,因此无法使用DwmExtendFrameIntoClientArea。

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

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

1 个答案:

答案 0 :(得分:0)

由于您无法扩展客户区,因此一种方法是创建一个浮动的WS_EX_LAYERED子窗口,并将所有者设置为顶级窗口,使其保持在该窗口的上方。

您可以挂钩WM_MOVEWM_SIZE消息的目标窗口的WndProc。