2

現在、私のプロジェクトでは、次のようにレイアウトされたパネルがあります。

  • wxBoxSizer(wxVertical)
    • wxSearchControl(wxExpand)
    • wxListControl (wxExpand)
    • wxBoxSizer(wxHorizo​​ntal, 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 でさまざまなフラグを使用してさまざまな構成でランダムなさまざまなサイザーを常に試して、それを機能させようとする無駄な試みですが、それは常に無駄に終わります。私はいくつかのサイザーのチュートリアルを見てきましたが、私が得た唯一の結論は、自分のサイザーを書く必要があるということです。

4

2 に答える 2

1

Sizers は、それらを含むウィンドウのサイズが変更されたときに、最初のパスの既定の動作を提供します。

ただし、デフォルトの動作以外が必要な場合は、ウィンドウのサイズ変更イベントを自分で処理し、ウィジェットのサイズを再計算する必要があります。

あなたの場合、他のウィジェットの合計「適切なサイズ」を決定し、これをウィンドウの新しいサイズから差し引き、残りを埋めるように ListCtrl のサイズを変更する必要があります。

于 2013-10-21T16:48:45.087 に答える