2016-11-06 8 views
1

私は3つのボタンを持つ単純なwxFrameを持っています。タブを押しても何も起こりません。フォーラムでは、wxFrameがTabボタンイベントを通常処理し、コントロール間のフォーカスを切り替える必要があることがわかりました。私はwxTAB_TRAVERSALを試してみましたが、結果は無かったようです。wxFrameはタブボタンを処理しません

ここに私のコードです。 wxWidgets 3.0.2。助けてください。

class TabWnd 
    : public wxFrame 
{ 
public: 
    TabWnd() 
     : wxFrame(nullptr, 
        wxID_ANY, 
        wxEmptyString, 
        wxDefaultPosition, 
        wxDefaultSize, 
        wxDEFAULT_FRAME_STYLE | wxTAB_TRAVERSAL) 
    { 
     wxBoxSizer* sz = new wxBoxSizer(wxVERTICAL); 

     wxButton* b1 = new wxButton(this, wxID_ANY, wxT("First")); 
     sz->Add(b1, 0, wxALL, 5); 

     wxButton* b2 = new wxButton(this, wxID_ANY, wxT("Second")); 
     sz->Add(b2, 0, wxALL, 5); 

     wxButton* b3 = new wxButton(this, wxID_ANY, wxT("Third")); 
     sz->Add(b3, 0, wxALL, 5); 

     SetSizer(sz); 
     Layout(); 
     Centre(wxBOTH); 
    } 
}; 

class WxguiApp 
    : public wxApp 
{ 
public: 
    bool OnInit() override 
    { 
     TabWnd* mainWnd = new TabWnd(); 
     mainWnd->Show(); 
     SetTopWindow(mainWnd); 

     return true; 
    } 
}; 

IMPLEMENT_APP(WxguiApp); 

答えて

1

フレームと、このようなボタンの間のパネルを追加してみてください:

wxBoxSizer* sz = new wxBoxSizer(wxVERTICAL); 

wxPanel* pnl = new wxPanel(this, wxID_ANY); 
wxBoxSizer* sz2 = new wxBoxSizer(wxVERTICAL); 

wxButton* b1 = new wxButton(pnl, wxID_ANY, wxT("First")); 
sz2->Add(b1, 0, wxALL, 5); 

wxButton* b2 = new wxButton(pnl, wxID_ANY, wxT("Second")); 
sz2->Add(b2, 0, wxALL, 5); 

wxButton* b3 = new wxButton(pnl, wxID_ANY, wxT("Third")); 
sz2->Add(b3, 0, wxALL, 5); 

pnl->SetSizer(sz2); 
sz->Add(pnl, 1, wxEXPAND); 

SetSizer(sz); 
Layout(); 
Centre(wxBOTH); 
関連する問題