0

私は基本的に簡単なダイアログを作ろうとしています。問題は、wxGridbagsizer の助けを借りて何をしても、ボタンが常に左隅に表示されることです (互いの上に)。

コードスニペット:

wxPanel* panel = new wxPanel(this,-1);

wxButton* b1 = new wxButton(panel,wxID_ANY,L"OK",wxDefaultPosition,wxDefaultSize,0);
wxButton* b2 = new wxButton(panel,wxID_ANY,L"Cancel",wxDefaultPosition,wxDefaultSize,0);
gbs->Add(b1,wxGBPosition(1,1));
gbs->Add(b2,wxGBPosition(2,2));


gbs->Fit(panel);
4

2 に答える 2

2

sizer レイアウトは実行されていません。コード スニペットがあまりにも多くのことを省略しているため、何が問題なのかを確認するのは困難です。たとえば、サイザーのコンストラクターを呼び出していると仮定しますが、コードは表示されません。とにかく、問題はあなたがサイザーについてパネルに伝えていないことだと思います.

panel->SetSizer( gbs );
于 2013-01-04T13:38:40.957 に答える
1

DialogBlocks を使用して、生成されるコードを確認し、グリッド バッグ サイザーの使用のワークフローを理解してください。

void Yarrr1::CreateControls()
{    
////@begin Yarrr1 content construction
    Yarrr1* itemPanel1 = this;

    wxGridBagSizer* itemGridBagSizer2 = new wxGridBagSizer(0, 0);
    itemGridBagSizer2->SetEmptyCellSize(wxSize(10, 20));
    itemPanel1->SetSizer(itemGridBagSizer2);

    wxButton* itemButton3 = new wxButton( itemPanel1, ID_BUTTON6, _("Button"), wxDefaultPosition, wxDefaultSize, 0 );
    itemGridBagSizer2->Add(itemButton3, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);

    wxButton* itemButton4 = new wxButton( itemPanel1, ID_BUTTON7, _("Button"), wxDefaultPosition, wxDefaultSize, 0 );
    itemGridBagSizer2->Add(itemButton4, wxGBPosition(1, 1), wxGBSpan(1, 1), wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);

////@end Yarrr1 content construction
}

http://screencast.com/t/mANmpGmGb20を生成します

于 2013-01-04T11:46:49.667 に答える