カスタムコントロール(その3)

VisualStyleRenderer系のスタティッククラスでは、ラジオボタンを描画するためのRedioButtonRendererクラスもある。使い方は簡単だ。ペイント時にラジオボタンを描画するならば、こんな感じに書ける。

protected override void OnPaint(PaintEventArgs e)
{
    string caption = "キャプションとなる文字列";
    Size textSize = TextRenderer.MeasureText(caption, this.Font);
    RadioButtonRenderer.DrawRadioButton(e.Graphics, new Point(0, 0), new Rectangle(10, 0, textSize .Width, textSize .Height), caption, this.Font, TextFormatFlags.PreserveGraphicsTranslateTransform, true, RadioButtonState.UncheckedNormal);
}

(他にも、昨日紹介したButtonRenderer、CheckBoxRenderer、GroupBoxRenderer 等がある)
なんと、このクラスのメソッドではフルにパラメタを指定することで、ラジオボタン本体、キャプションにあたる文字列、フォーカスがあることを示す矩形、ラジオボタンの状態、これら全てを一度に描画することができるのである。なんと便利なのだろう。

汎用性は無いが、このような目的がはっきりしているAPIは解りやすくて良いと思う。殆どがスタティックになっているのも割り切りというか、潔さを感じるし。
それにしても、コントロールの描画は一昔に比べると随分と楽になったものだな。チェックボックスやボタンを自前で描画していた頃が嘘のようだ。