2012-02-07 3 views
4

C#で、システムの背景色をスクロールバーやプッシュインのオプションボタンやタブ(下の画像の 'tabPage1'の背景)などに使用する方法を知っている人はいますか?
また、あらかじめ定義されたconstが存在しない場合は、このアルゴリズムでどのようにBrushを作成するのですか?ありがとうございました!いくつかのWindows要素(スクロールバー、プッシュインオプションボタンなど)で使用されるBGカラーを参照する方法は?

background for tabPage1 indicates desired color

私は「背景」と呼びたいものを私の直感的な最初の選択肢は本当にスクロールバーの「顔」の色である.Control.ButtonFace(「tabPage2」のBG)と同じでSystemColors.ScrollBar結果、ではなく、 。
SystemColors.ControlLightまたはSystemColors.ControlLightLightは、任意のより近くを得ることはありません。..

にズームインすると、コントロールのその領域は非常に私には、.Control.Windowピクセルとチェッカーボードのように見えるディザリングされている。この色の可能性を示唆しています;多分それは標準SystemColors enumがそれを定義しない理由を示しているでしょうか?私はそれを別のコントロールにどのように適用しますか?

zoomed-in view exposes the dithering

PS:私は、カスタムタブコントロール強化しようとしている - その.Appearanceが設定されている場合になるように、(disableableタブをサポートSTDコントロールから抜けて別の良いものを、それは別だとすでに話を解きます) ButtonsまたはFlatButtonsに変更すると、元のものと似ています(上記)。選択したタブを押し、中ボタンで表示されますが、その背景色はControlまたはButtonFaceに設定されています:

enter image description here

+0

システムの色を変更してフォームコントロールに設定するだけでよいことを正しく理解していますか? – Kath

+0

いいえ、 'SystemColors'列挙体に列挙されていないシステムカラー(それが..の場合)を参照し、コントロール上で使用したいと思います。 Windowsのテーマが '.Control'の色が、例えばシアンであるようにカスタマイズされている場合、Qにリストされているコントロールはシアンの色合いが薄いため、この「色」はメインのものから派生する必要があります。それが明示的に宣言されていない理由です)。私が望むのは、WinFormのコントロールにそれを適用する方法です。 – Astrogator

答えて

1

[OK]を、これは思ったよりもずっと簡単であることが判明した - それは、BG-RECTを埋めるために使用さBrush、約だけです:

protected override void OnDrawItem(DrawItemEventArgs e) 
{ 
    base.OnDrawItem(e); 

    int   i= e.Index; 
    TabPage  p= this.TabPages[ i ]; 
    Rectangle r= GetTabRect(i); 
    Brush  br= null; 

    if( this.Appearance != TabAppearance.Normal && i == this.SelectedIndex ) 
     br= new HatchBrush(HatchStyle.Percent50, SystemColors.Control, SystemColors.Window); 
    else 
     br= new SolidBrush(p.BackColor); 

    try      // fill the BG-rectangle 
    { e.Graphics.FillRectangle(br, r);  } 
    finally 
    { br.Dispose(); } // make sure brush is disposed of 

    .. // the rest of the event-handler 
} 

唯一のトリックはusing(Brush br= new ..) {..}ブロックは適用できないということです初期化は結果のオブジェクトタイプと異なります。したがって、幾分醜いtry-finallyの構成です。魅力的な作品!

0

私は、私は非常によくフォームを知りません申し訳ありませんが、しかし、MFCはする機能を有していますそのようなディザリングされたビットマップ(AfxGetDitheredBitmap)を提供するので、あなたは何か似たようなことをしなければならないと思います。

残念ながら、.Net同等の機能が見つかりませんでした。

関連する問題