現在のAeroスタイルに関連するシステムカラーを取得するにはどうすればよいですか?特に、選択グラデーションで使用される色が必要です。SystemColors
構造に必要な色が含まれていません。
または、WinAPIを使用して特定のキャンバス(グラフィックスオブジェクト)に選択範囲を描画するにはどうすればよいですか?
現在のAeroスタイルに関連するシステムカラーを取得するにはどうすればよいですか?特に、選択グラデーションで使用される色が必要です。SystemColors
構造に必要な色が含まれていません。
または、WinAPIを使用して特定のキャンバス(グラフィックスオブジェクト)に選択範囲を描画するにはどうすればよいですか?
さて、最初の質問に対する答えは次のとおりです。私が求めた特定の色を決定する方法はありません。これは、OSが提供する内部テーマルーチンによって評価されます。
幸いなことに、OSにテーマのあるコントロール、いわゆるパーツを描画するように依頼する方法があります。.NETには、UIを描画するための2つのクラスがあります。
テーマUIおよび
テーマのない「Windowsクラシック」用のSystem.Windows.Forms.ControlPaint 。
私が求めた選択は、次のコードで描画される可能性があります。
// Graphics g = ...
VisualStyleRenderer selectionRenderer = new VisualStyleRenderer(VisualStyleElement.TreeView.Item.Selected);
selectionRenderer.DrawBackground(g, someRectangle);
残念ながら、デフォルトのウィンドウテーマではサポートされていTreeView.Item.Selected
ません。ListView.Item.Selected
ただし、p/invokeを介してWinAPIを使用してテーマをエクスプローラに切り替えることができます。
// C++
SetWindowTheme(hwnd, L"Explorer", nullptr);
そして、P /は、完全に機能するいくつかのUXTheme.hルーチンを介して彼の方法を呼び出します。
選択されたテキストと選択されたメニュー項目も含む、選択された項目の背景のシステム定義の色は、次の場所にあります。System.Drawing.KnownColor.Highlight
次に、構造体を使用して、Color
から色を取得できます。KnownColor
例
System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.Highlight);
ありがとう、
ハッピーホリデー!:)