1

ボタンのグリッドを使用して WXWidgets にウィンドウを設定しようとしています。これらの各ボタンは、別のウィンドウを開きます。押されたボタンに応じて、各ウィンドウへの呼び出しを個別の関数で行うことで、これを実行できることがわかりました。しかし、それは少し効率が悪いようです。

私がやりたいことは、これらのボタンのそれぞれがクリックされたときに同じ関数を呼び出すようにすることですが、開いているウィンドウを決定するために使用される ID を渡します。

私が使用している基本的なコードは次のとおりです(ビットが取り除かれ、ボタンをテストするためだけにアプリケーションを閉じるボタンがあります)

Simple::Simple(const wxString& title, int x, int y)
       : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(x,y))
{

    wxPanel  *testPanel  = new wxPanel(this,wxID_ANY, wxDefaultPosition,wxSize(270, 150));
    wxButton *testButton = new wxButton(testPanel, wxID_EXIT, wxT("Actors"), wxPoint(20,20));
    Connect(wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Simple::eventWindowCall));
    testButton->SetFocus();

    Centre();
}

void Simple::eventWindowCall(wxCommandEvent & WXUNUSED(event))
{
    Close(true); //just a line to make sure this function is being called
}

接続を使用するときに、イベント ID の代わりに数値を使用しようとしましたが、ボタンの関数が呼び出されません。理想的には、wxCommandEventHandler(Simple::eventWindowCall(26)) のようなことをして、イベントウィンドウコール関数に case ステートメントを入れて、渡された数に基づいて正しいウィンドウを表示することができます。しかし、これまでのところ、そのアプローチも効果的ではありませんでした。

あなたが提供できるアドバイスは素晴らしいでしょう。これを読んでくれてありがとう。私はこれを理解するために何時間も取り組んできました。

4

1 に答える 1

4

int wxEvent::GetId() const

ボタン コマンド ID など、このイベントに関連付けられた識別子を返します。

wxCommandEvent関数に渡されるから、イベントに関連するコントロール ID を取得できます。

void eventWindowCall(wxCommandEvent& event) {
    event.GetId(); // <-
}

これにより、押されているボタンのIDが得られます.wxID_EXITの場合(ボタンに割り当てたIDであるため):

new wxButton(testPanel, wxID_EXIT
//                      ^^^^^^^^^ this will be passed as event id

詳細については、 wxCommandEventとその基本クラスであるwxEventのドキュメントを参照してください。

于 2012-12-28T21:16:42.930 に答える