在Windows 7下更改MDI子窗口的颜色

时间:2009-08-25 13:09:59

标签: windows-7 office-2007 mdi themes

我有一个用C ++编写的MDI应用程序,在Windows XP下看起来很棒。所有MDI子窗口最终看起来都像父窗口一样。尼斯。但是,在Windows 7(可能是Vista)下,父窗口有空气玻璃,子窗口是这种可怕的不可更改的浅蓝色(与Windows 7 Basic主题相同)。所以我的应用程序看起来非常糟糕。

通过启动Office 2003并尝试查看MDI子窗口(可能在Excel中),您可以看到同样丑陋的行为。但是,Office 2007实际上有三种颜色主题 - 蓝色,银色和黑色。这些主题以某种方式传递到Excel中的MDI子窗口。

我不知道微软是如何在Office 2007中这样做的。我很想知道这个伎俩。我需要挂钩并接管我的MDI子窗口的绘图,并复制Office 2007团队已经完成的工作。问题是我想使用所有的DrawTheme *调用,所以我得到了渐变和圆角边和按钮都正确绘制。所有这些系统调用都需要处理主题。但是,例如,似乎不可能使用SetWindowTheme更改为使用其他主题的配色方案。至少据我所知。

有人知道微软是如何做到这一点的吗?

1 个答案:

答案 0 :(得分:1)

这不是一个很好的解决方案,但是在网上闲逛,我发现this article关于如何将WinXP圆形外观放入方形平面Win95 / Win98 / Win2k窗口样式中。它的工作原理是使用WinXP主题的BMP快照,而不是使用bitblit函数将它们拉伸到窗框边框周围的适当大小。我尝试了他的演示软件,果然,它看起来像Win7下的WinXP Luna。我可以用他的例子作为钩子和替换我的MDI子窗口框架图的基础。

这种方法的问题在于,您必须选择标题栏宽度并坚持使用它并且不响应更改标题栏高度的全局主题调整,或者您必须采用不同大小的许多不同BMP快照。就我的目的而言,坚持一个厚度并忽略用户主题调整可能很好。一旦到位,我可以通过BMP快照应用不同的主题 - 所以我也可以应用Office 2007 MDI子项外观。