6

タスクバーやアプリケーションのメイン ウィンドウの背景とテキストの色を取得しようとしています。Windows 7 が正しい色を返さないことが判明しました。ピンクのテーマに切り替えても、Windows 7 はまだウィンドウ キャプションに水色を返しますが、そうではありません。これは、

GetSysColor(COLOR_ACTIVECAPTION); 

HTHEME hTheme = OpenThemeData(hwnd, L"WINDOW"); を使用するだけでなく、

HRESULT result = GetThemeColor(      
                hTheme,
                WP_CAPTION, 
                CS_ACTIVE, 
                TMT_FILLCOLORHINT, 
                &color);

さらに、キャプション テキストの色を調べるために、パラメーターのさまざまな組み合わせを試してみました。私はマイクロソフトのページを知っています

プロパティ識別子パーツと状態

しかし、これらの数百のパラメーターのほとんどの組み合わせは無効です。使用できる組み合わせのリストや説明はありますか?

いえ

 GetThemeColor(      
                    hTheme,
                    WP_CAPTION, // BP_PUSHBUTTON,
                    CS_ACTIVE, 
                    TMT_CAPTIONTEXT,
                    &color);

「要素が見つかりません」を返します。

4

3 に答える 3

9

XP テーマに関する私の知識によると、.msstyles ファイルは、すべて任意に定義されたイメージとプロパティ (色、サイズ、フォントなど) を持つパーツ定義のコレクションにすぎません。UxTheme API はこのファイルにあるものを返すだけであり、プロパティの特定の組み合わせの存在は、基本的にテーマの作成者によって異なります (そのため、常に "classic"GetSysColorにフォールバックする必要があります。GetSystemMetricsまたはSystemParametersInfo、テーマ API が何も返さなかった場合)。あなたは探している。

ただし、ここで「ピンクのテーマ」について言及しているので、Aero Glass のテーマについて話していると思います。Aero テーマの色は DWM によって処理されますが、クラシックまたは UxTheme API の色とは別のものです。Aero ウィンドウの色を取得するには、 を使用する必要がありますDwmGetColorizationColor。これは、0xAARRGGBB 形式で返されます ( COLORREF0x00BBGGRR である とは対照的に、2 つの形式間で変換する必要があります)。DWM コンポジション (別名 "Aero Glass") が有効になっているかどうかを最初に確認するには、 を呼び出す必要がありますDwmIsCompositionEnabled

于 2009-12-11T21:04:33.370 に答える
0

プロパティ定数(つまり、テーマ関数がiPartIdパラメーターとして受け入れるもの)は、テーマ定義がさまざまなクラス/パーツ/スタイルの組み合わせに対して定義できる(必須ではない)もののセットを提供するだけです。

つまり、コードは他の方法で決定された色にフォールバックする準備ができている必要があります。

XP(Luna)またはVista / 7(Aero)の標準テーマがどのように定義されているかを確認すると便利なことがよくあります。そのためには、それを行うものを使用できます。たとえば、ThemeExplorer: http ://sourceforge.net/projects/mctrl/files/theme-explorer/

于 2012-06-13T11:25:24.313 に答える