現在、私のプロジェクトでは、次のようにレイアウトされたパネルがあります。
- wxBoxSizer(wxVertical)
- wxSearchControl(wxExpand)
- wxListControl (wxExpand)
- wxBoxSizer(wxHorizontal, wxALIGN_CENTER)
- wxButton (wxALL)
- wxButton (wxALL)
問題は、パネルが展開されると、ボタンがある場所の下に無駄なスペースが作成され、パネルが縮小されると逆の問題が発生することです。つまり、望ましくない動作である wxListControl を縮小する前に、ボタンが完全に見えなくなることを意味します。望ましい動作は次のようなものです: 拡張するとき、すべてが「適切なサイズ」になるようにしたい場合、拡張し続けるのは wxListControl だけです。と検索制御を縮小する必要があります。次の図は、問題を強調する必要があります。
**
下部の無駄なスペース: http://i.stack.imgur.com/lsXOv.png
ボタンが壊れている: http://i.stack.imgur.com/U50In.png
だからここに私のコードがあります(小さな幅のために編集され、悪い名前が保持され、すべて):
lbxEntityList = new wxListCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
wxLC_REPORT | wxLC_EDIT_LABELS | wxLC_HRULES,
wxDefaultValidator, wxT("Entity List Control"));
lbxEntityList->AppendColumn("Entities",wxLIST_FORMAT_LEFT, 80);
srchControl = new wxSearchCtrl(this, wxID_ANY, "", wxDefaultPosition,
wxDefaultSize);
#ifndef __WXMAC__
srchControl->ShowSearchButton( true );
#endif
srchControl->ShowCancelButton( false );
btn_RemoveEntity = new wxButton( this, wxID_ANY, wxT("Remove Entity"),
wxDefaultPosition, wxDefaultSize, 0);
btn_AddEntity = new wxButton(this, wxID_ANY, wxT("Add Entity"),
wxDefaultPosition, wxDefaultSize, 0);
sizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer* o = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(srchControl, wxSizerFlags().Expand().Border(wxALL, 10));
sizer->Add( lbxEntityList, wxSizerFlags().Expand().Border(wxALL, 10));
sizer->Add(o, 1, wxALIGN_CENTER, 5);
o->Add( btn_RemoveEntity, 0, wxALL, 5 );
o->Add( btn_AddEntity, 0, wxALL, 5 );
SetSizer( sizer );
Layout();
sizer->Fit(this);
私が試みた唯一のことは、wxFormBuilder でさまざまなフラグを使用してさまざまな構成でランダムなさまざまなサイザーを常に試して、それを機能させようとする無駄な試みですが、それは常に無駄に終わります。私はいくつかのサイザーのチュートリアルを見てきましたが、私が得た唯一の結論は、自分のサイザーを書く必要があるということです。