|
色選択ダイアログ
今回もコモンダイアログの続きです。次のような色選択のダイアログを作ってみましょう。

では、さっそくプロジェクトを作成し、次のようなダイアログを作ります。

"色選択"ボタンが押されると、色選択ダイアログを表示し、スタティックテキストの文字列を、指定した色で描画します。
ボタンにはBN_CLICKEDのメッセージハンドラを追加します。(「ボタンの基本」等を見てください。)
色情報はCOLORREF型の変数で扱います。ここではダイアログのメンバ変数に保持します。

では、コードを実装していきましょう。まずは、コンストラクタで色情報の初期値を入れておきます。
// コンストラクタ
CColorSelectDlg::CColorSelectDlg(CWnd* pParent /*=NULL*/)
: CDialog(CColorSelectDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_color = RGB(255, 0, 0);
} |
次はスタティックテキストの文字色を変更するために、CWnd::OnCtlColor()関数をオーバーライドします。ダイアログクラスのプロパティからメッセージアイコンをクリックし、WM_CTLCOLORを選択します。

OnCtlColor()関数では、スタティックテキストの文字色変更処理を追加します。
HBRUSH CColorSelectDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// スタティックテキストの色変更
if (nCtlColor == CTLCOLOR_STATIC) pDC->SetTextColor(m_color);
return hbr;
} |
次は"色選択"ボタンが押されたときのイベントハンドラです。
// "色選択"ボタン押下
void CColorSelectDlg::OnBnClickedColorSel()
{
CColorDialog CColorDialog(m_color);
int err = 0;
// 色選択ダイアログ表示
if (CColorDialog.DoModal() == IDOK)
{
// 選択された色を取得
m_color = CColorDialog.GetColor();
// 表示更新
Invalidate();
}
return;
} |
色選択のダイアログは、CColorDialogクラスを使います。コンストラクタにCOLORREF型の変数を渡すと、初期状態でその色が選択された状態になります。
選択された色を取得するには、CColorDialog::GetColor()関数を使います。選択された色でスタティックテキストを更新するために、CWnd::Invalidate()関数を1度呼び出します。こうするとWM_CTLCOLORメッセージが発行されます。
では、ビルドして実行してみましょう。色選択ダイアログで任意の色を選択すると、スタティックテキストの文字色が変わります。



|