1

Windows XP で見栄えのする C++ で記述された MDI アプリケーションがあります。MDI 子ウィンドウはすべて、最終的に親ウィンドウのように見えます。良い。ただし、Windows 7 (およびおそらく Vista) では、親ウィンドウにはエアロ グラスがあり、子ウィンドウは、この忌まわしく変更不可能な水色 (Windows 7 の基本テーマと同じ) です。したがって、私のアプリケーションは本当に非常に悪いように見えます。

Office 2003 を起動し、MDI 子ウィンドウ (おそらく Excel) を見てみると、これと同じ醜い動作が見られます。ただし、Office 2007 には、実際には、青、銀、および黒の 3 つのカラー テーマがあります。これらのテーマは、何らかの形で Excel の MDI 子ウィンドウに引き継がれます。

Microsoft が Office 2007 でこれをどのように行っているかはわかりません。トリックを知りたいです。MDI 子ウィンドウの描画をフックして引き継いで、Office 2007 チームが実現したものを複製する必要があります。問題は、すべての DrawTheme* 呼び出しを使用して、グラデーションと丸みを帯びたエッジとボタンをすべて適切に描画することです。そして、これらすべてのシステム コールには、テーマへのハンドルが必要です。ただし、たとえば SetWindowTheme を使用して、別のテーマの配色を使用するように変更することはできないようです。少なくとも私が知る限り。

マイクロソフトがこれをどのように達成したか知っている人はいますか?

4

1 に答える 1

1

これは優れたソリューションではありませんが、Webをざっと見て、WinXPの丸みを帯びた外観を角張ったフラットなWin95 / Win98/Win2kウィンドウスタイルに配置する方法についてのこの記事を見つけました。これは、WinXPテーマのBMPスナップショットを使用し、ビットブリット関数を使用してウィンドウフレームの境界の周りの適切なサイズにそれらを拡大することによって機能します。私は彼のデモソフトウェアを試しましたが、確かに、Win7ではWinXPLunaのように見えます。彼の例を基礎として使用して、MDIの子ウィンドウフレームの描画をフックして置き換えることができます。

このアプローチの問題は、タイトルバーの幅を選択してそれに固執し、タイトルバーの高さを変更するグローバルテーマの調整に応答しないか、さまざまなサイズでさまざまなBMPスナップショットを作成する必要があることです。私の目的では、1つの厚さに固執し、ユーザーテーマの調整を無視することはおそらく問題ありません。配置が完了すると、BMPスナップショットを作成するだけでさまざまなテーマを適用できるため、Office2007MDIの子の外観も適用できます。

于 2009-08-27T11:44:29.530 に答える