ホーム < ゲームつくろー! < IKD備忘録

wxWidgets
リストボックスを表示させてみる

(2010. 5. 4)


 コントロールの代表格の一つであるリストボックスをwxWidgetsで表示してみます。



@ リストボックスクラス

 これまでと同様にまずはリストボックスを生成してみます。リストボックスのクラスはwxListBoxです:

#include "wx/listbox.h"

TestFrame::TestFrame(const wxString &title, const wxSize &size) :
    wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size)
{
    wxListBox listBox = new wxListBox(panel, ListBoxID, wxPoint(150, 20));
}

実際これだけで空のリストボックスが表示されます:

右の白いのが空のリストボックスです。とっても簡単(^-^)。後はここにアイテムとなる文字列を登録したり外したり選択したりできればリストボックスはOKですよね。



A アイテムを追加する

 アイテムを追加するには幾つかの方法がありますが、最後尾追加と挿入があれば何とかなります。それぞれ次のようにします:

listBox->Append("Item0"); // アイテムを最後尾に追加
listBox->Append("Item1");
listBox->Append("Item3");
listBox->InsertItems(1, &wxString("Item2"), 2); // 2番目の後ろ、3番目の前位置にアイテムを挿入

wxListBox::Appendメソッドは最後尾にアイテムを追加します。呼べば呼ぶだけどんどん追加です。wxListBox::InsertItemsメソッドは指定の箇所にアイテムを挿入します。上の実装の第1引数は第2引数の文字列配列数です。第2引数はwxStringの配列の先頭アドレスを渡します。上の例では1つだけ挿入するので文字列オブジェクトのポインタを渡しています。第3引数は挿入箇所で、指定した番号の前に挿入されます。



B アイテムを削除する

 アイテムを削除するにはwxListBox::Deleteメソッドを使います:

listBox->Delete(2); // アイテムを削除

引数は要素番号です。この番号がマイナス値やアイテム数以上になるとエラーとなりますので注意して下さい。



C アイテムの個数を取得

 アイテム数はwxListBox::GetCountメソッドで得られます:

int num = listBox->GetCount(); // アイテム数を取得

特にコメントする事もないかなと思いますです。



D クリック選択とハンドラ

 リストボックスはクリックで選択出来てなんぼのもんです。マウスクリックによる選択自体はウィジットがやってくれます。プログラム側で用意するのはそのハンドラです。リストボックスは2つのイベントを送信します。リスト上のアイテムをクリック選択するとwxEVT_COMMAND_LISTBOX_SELECTEDイベントが発行されます。同様にアイテムをダブルクリック選択するとwxEVT_COMMAND_LISTBOX_DOUBLECLICKEDが送出されます。これらのイベントとハンドラを結びつけるのは、すっかりおなじみConnectメソッドです:

#include "wx/listbox.h"

TestFrame::TestFrame(const wxString &title, const wxSize &size) :
    wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size)
{
    listBox = new wxListBox(panel, ListBoxID, wxPoint(150, 20));
    Connect(ListBoxID, wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler(TestFrame::OnListBoxSelect));
    Connect(ListBoxID, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler(TestFrame::OnListBoxDClick));
}

// リストボックス選択
void TestFrame::OnListBoxSelect(wxCommandEvent& event) {
    int a = 100;
}

// リストボックスダブルクリック
void TestFrame::OnListBoxDClick(wxCommandEvent& event) {
    int a = 100;
}

これで選択するとバンバンハンドラに飛んできます。ハンドラ内では選択した番号をevent.m_commandIntから取得できます。

 ん〜、ツールとして最低限必要なものとしては後はEditBoxくらいかな。