|
コンボボックスの基本
今回はコンボボックスの基本的な使い方を見てみましょう。まず、リソースエディタでコンボボックスを作成します。今回はコンボボックスとボタン1つを追加しました。
コンボボックスを作成するときは少し気をつけることがあります。コンボボックスはコンボボックス自体のサイズと、プルダウンで出てくるリストのサイズの両方を決めなければいけません。リストのサイズは、コンボボックスの↓部分を一度クリックしてから下方向にサイズを伸ばすと設定できます。
 
では、コンボボックスのプロパティを設定します。ここではリソースIDを設定し、「Type」を「ドロップダウンリスト」にします。他はデフォルトのままでOKです。

コンボボックスに必要な操作は、リストに文字列を追加/削除することと、現在選択されている文字列を取得/設定することですね。まず、現在選択されている文字列の取得/設定はDDXのvalue変数で簡単に実装できます。リストに文字列を追加/削除するには、CComboBoxクラスの関数を使うので、DDXのcontrol変数を追加します。
では、DDX変数を追加しましょう。コンボボックスを右クリックし、「変数の追加」を選択します。

アクセスはprivate、「コントロール変数」をチェックし、カテゴリにvalueを選択します。変数のデータ型はインデックス値なのでint型にします。
変数名はメンバ変数となるのでm_で始まる名前にしましょう。さらにDDXのvalue変数であることがわかるようにm_xvで始まる名前にすると分かりやすくなります。この辺は好みで決めましょう。
次にもう一度「変数の追加」を選び、今度はカテゴリにControlを選択します。これでCComboBox型の変数を追加できます。Control型の変数なのでm_xcで始まる名前にするとよいでしょう。

コンボボックスに変数を追加したら、さらにボタンにBN_CLICKEDのメッセージハンドラを追加します。(ボタンのイベントハンドラの追加方法は、「ボタンの基本」を見てください。)
まず、コンボボックスに文字列を挿入しましょう。OnInitDialog()で次のように処理します。CComboBox::InsertString()は指定したインデックス位置に文字列を挿入します。インデックスに-1を指定したときはリストの最後に追加されます。
現在の選択値をセットするには、DDX変数にインデックス値をセットし、UpdateData(FALSE)を呼び出します。
BOOL CComboDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
{
int err = 0, cbErr = 0;
if (!err)
{
cbErr = m_xcCombo.InsertString(-1, _T("文字列1"));
if (cbErr == CB_ERR || cbErr == CB_ERRSPACE) err = 1;
}
if (!err)
{
cbErr = m_xcCombo.InsertString(-1, _T("文字列2"));
if (cbErr == CB_ERR || cbErr == CB_ERRSPACE) err = 1;
}
if (!err)
{
cbErr = m_xcCombo.InsertString(-1, _T("文字列3"));
if (cbErr == CB_ERR || cbErr == CB_ERRSPACE) err = 1;
}
if (!err)
{
m_xvCombo = 2;
UpdateData(FALSE);
}
}
return TRUE;
}
|
ボタンのイベントハンドラの内容は次のようにしました。UpdateData()でDDX変数の値を更新し、メッセージボックスに読み取った文字列を表示します。m_xvComboには現在選択されている文字列のインデックスが入っています。CComboBox::GetLBText()は、指定したインデックスの文字列を取得します。
// "読み取り"ボタン押下
void CComboDlg::OnBnClickedGet()
{
CString str;
UpdateData(TRUE);
m_xcCombo.GetLBText(m_xvCombo, str);
MessageBox(str);
}
|
ビルドして実行してみましょう。"読み取り"ボタンを押すと、コンボボックスで現在選択されている文字列がメッセージボックスに表示されます。

|