2009-08-25 65 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