2009-08-25 105 views
1

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

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

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

任何人都知道微软是如何做到这一点的?

回答

1

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

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

+0

我真的很讨厌这样做,因为它违反了GUI标准,但如果微软提供了一些在Windows 7下调整MDI儿童颜色的功能,我甚至不需要考虑这一点。 – dsmtoday 2009-08-27 11:48:10