1

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

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

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

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

4

1 回答 1

1

这不是一个很好的解决方案,但是在网络上四处寻找,我发现了这篇关于如何将 WinXP 圆形外观放入方形平面 Win95/Win98/Win2k 窗口样式的文章。它通过使用 WinXP 主题的 BMP 快照而不是使用 bitblit 函数将它们拉伸到窗口框架边框周围的适当大小来工作。我试了试他的demo软件,果然和Win7下的WinXP Luna差不多。我可以以他的例子为基础来挂钩和替换我的 MDI 子窗口框架绘图。

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

于 2009-08-27T11:44:29.530 回答