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

wxWidgets
トグルボタンを表示させてみる

(2010. 5. 4)


 トグルボタンはON/OFFスイッチのように一度押すとON、もう一回押すとOFFになるようなボタンです。



@ トグルボタンクラス

 トグルボタンクラスはdwToggleCButtonです。この使い方はwxButtonクラスに極めて似ているので簡単です。前章のフレームにトグルボタンを追加しました:

#include "wx/tglbtn.h"

TestFrame::TestFrame(const wxString &title, const wxSize &size) :
    wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size)
{
    // パネル
    wxPanel *panel = new wxPanel(this, wxID_ANY);

    // ボタン
    wxButton *button = new wxButton(panel, wxID_EXIT, _("Exit"), wxPoint(20, 20));
    Connect(wxID_EXIT, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TestFrame::OnQuit));
    button->SetFocus();

    // トグルボタン
    wxTogleButton *toggleButton = new wxToggleButton(panel, ToggleButtonID, _("Toggle"), wxPoint(20, 50));
    Connect(ToggleButtonID, wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TestFrame::OnToggleClick));

    Center();
}

// トグルボタンクリック
void TestFrame::OnToggleClick(wxCommandEvent& event) {
    int a = 100;   // テストですよ
}

恐ろしいことに、上の太文字の2行を付け足すだけでボタンが表示します。すばらしいぞwxWidgets!コンストラクタの意味はwxButtonクラスとまったく同じです。ToggleButtonIDは私が勝手に定義したIDです。

 トグルボタンが押された時にはwxEVT_COMMAND_TOGGLEBUTTON_CLICKEDが発生します。それをTestFrame::OnToggleClockメソッドで受ける事にしました。上の僅かな変更をしただけで、次のようなボタンが表示されました:

 上の青くなっている状態が「ON」です。



A クリックイベント

 上のToggleボタンを押すとTestFrame::OnToggleClickハンドラが呼び出されます。これ自体はボタンと同じです。ただ、トグルボタンの場合、引数に渡されているeventオブジェクトからトグルの状態を得ることができます。

 トグルボタンをONにした時、wxCommandEvent::m_commandIntメンバに1が、OFFの時には0が入ってきます。これでONの時OFFの時それぞれの振る舞いをメソッド内に記述すれば色々な事ができますね。