|
ラジオボタンの基本
今回はラジオボタンを実装します。ラジオボタンはグループの中でどれか1つしか選択できないボタンです。まず、リソースエディタでラジオボタンを追加しましょう。今回はラジオボタン3つとボタン1つを追加しました。
次にラジオボタン特有の「グループ」を作ります。では、作成した3つのラジオボタンを1つのグループにまとめましょう。メニューから「書式」->「タブオーダー」を選択します。ここでグループにしたいラジオボタンが連番になっていることを確認します。連番になっていない場合は、コントロールをクリックするとその順番にタブオーダーが変更されます。

次にラジオボタンのプロパティを設定します。ここではリソースIDとキャプションを設定します。そして、グループにしたいラジオボタンのうち、最初のタブオーダーのラジオボタンだけ「Group」をTrueにします。他はデフォルトのままでOKです。

ラジオボタンは現在どのボタンが選択されているかを取得/設定できれば十分ですね。これはDDXのvalue変数を使って簡単に実装できます。では、DDX変数を追加しましょう。グループの最初のラジオボタンを右クリックし、「変数の追加」を選択します。

アクセスはprivate、「コントロール変数」をチェックし、カテゴリにvalueを選択します。変数のデータ型はintにします。なぜか選択肢にintが出てきませんが、intと手入力しましょう。グループ化がうまくできていれば、コントロールIDに先頭のラジオボタンのIDしか出てこないので、ここで確認しておきましょう。
ラジオボタンが2つしかない場合はBOOLでも大丈夫です。その場合は、FALSEが1番目のボタン、TRUEが2番目のボタンが選択されていることになります。
変数名はメンバ変数となるのでm_で始まる名前にしましょう。さらにDDXのvalue変数であることがわかるようにm_xvで始まる名前にすると分かりやすくなります。この辺は好みで決めましょう。

ラジオボタンに変数を追加したら、さらにボタンにBN_CLICKEDのメッセージハンドラを追加します。(ボタンのイベントハンドラの追加方法は、「ボタンの基本」を見てください。)
ハンドラの内容は次のようにしました。UpdateData()でDDX変数の値を更新し、メッセージボックスにチェック状態のメッセージを表示します。
void CRadioDlg::OnBnClickedGet()
{
CString str;
UpdateData();
str.Format(_T("ラジオボタン%dが選択されています。"), m_xvRadio +1);
MessageBox(str);
}
|
逆に、ラジオボタンの選択状態を設定したい場合は、次のようにDDX変数にインデックス値をセットし、UpdateData(FALSE)を呼び出します。ここでは、OnInitDialog()で3番目のラジオボタンを選択状態になるようにしてみました。
BOOL CRadioDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
m_xvRadio = 2;
UpdateData(FALSE);
return TRUE;
}
|
コンパイルして実行してみましょう。3番目のラジオボタンが選択されています。選択を変更し、ボタンを押すとメッセージボックスが表示されます。

|