|
ラジオボタンの色変更
今回はラジオボタンの色の変更方法をやります。ラジオボタンをウィンドウとして扱うので、次のようにControl型のDDX変数を追加します。

では、コードを実装していきましょう。コントロールが描画されるときは、親ウィンドウにWM_CTLCOLORメッセージが送られます。このメッセージが送られたときに、ラジオボタンの色を変更します。
ダイアログクラスのプロパティからメッセージアイコンをクリックし、WM_CTLCOLORを選択し、CWnd::OnCtlColor()関数をオーバーライドします。

OnCtlColor()関数では、次のようにラジオボタンの色変更処理を追加します。
HBRUSH CRadioDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// ラジオボタンの色変更
if (nCtlColor == CTLCOLOR_STATIC)
{
if (*pWnd == m_xcRadio1)
{
// 文字色
pDC->SetTextColor(RGB(255, 0, 0));
// 背景色
hbr = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
pDC->SetBkColor(RGB(0, 0, 0));
}
}
return hbr;
} |
OnCtlColor()関数の第2引数は、描画されようとしているコントロールのポインタ、第3引数はコントロールの種類が渡されます。文字色の変更は、CDC::SetTextColor()関数を使います。
背景色の変更は、hbrに設定したい色のブラシをセットし、さらにCDC::SetBkColor()関数を実行します。ここではストックオブジェクトを使っていますが、独自の色を設定したい場合は、独自のブラシを作成します。
もしhbrにブラシをセットしないと、次のようになってしまいます。文字領域以外の背景部分が変わらないままになってしまいます。

では、ビルドして実行してみましょう。ラジオボタンの色が変わります。この方法で変更できるのはテキストの色と背景色だけです。ラジオボタン部分の色は変えることはできません。

|