|
リストボックスの基本
今回はリストボックスの基本的な使い方を見てみましょう。リストボックスはプルダウンになっていないコンボボックスと考えることができます。ですので実装方法はコンボボックスとほぼ同じです。
まず、リソースエディタでリストボックスを作成します。今回はリストボックスとボタン1つを追加しました。
では、リストボックスのプロパティを設定します。ここではリソースIDを設定します。他はデフォルトのままでOKです。

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

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

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

|