2

目前在我的项目中,我有一个面板,其中的内容如下所示:

  • wxBoxSizer(wxVertical)
    • wxSearchControl(wxExpand)
    • wxListControl (wxExpand)
    • wxBoxSizer(wxHorizo​​ntal, wxALIGN_CENTER)
      • wxButton (wxALL)
      • wxButton (wxALL)

问题是,当面板展开时,它会在按钮所在的下方浪费空间,而当面板收缩时也会出现相反的问题,这意味着在收缩 wxListControl 之前将按钮完全从视线中移除,这是不受欢迎的行为。期望的行为是这样的:当扩展我希望所有东西都达到它的“合适的大小”时,唯一会继续扩展的是 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 中使用不同标志的不同配置中随机不同的 sizer,徒劳地试图让它工作,但这总是徒劳无功。我看过几个sizer教程,唯一的结论是我需要编写自己的sizer,我希望我遗漏了一些东西,我不必这样做。

4

2 回答 2

3

我将此问题交叉发布到 wx-users 邮件列表并收到以下答案:

在垂直大小调整器中,EXPAND 标志只控制控件在水平方向上的大小。对于垂直方向,“比例”参数是相关的。

将搜索控件和底部水平框大小设置的比例设置为 0。

设置列表框的比例为 1。

那应该给你你想要的行为。

尽管答案没有提供正确的收缩行为,但它确实提供了正确的扩展行为,这在我的情况下更为重要。

于 2013-10-23T00:06:30.713 回答
1

当包含它们的窗口被调整大小时,Sizer 提供了首次通过的默认行为。

但是,如果您需要默认行为以外的其他内容,则必须自己处理窗口调整大小事件,并重新计算小部件大小。

在您的情况下,您将需要确定其他小部件的总“合适大小”,从窗口的新大小中减去它,然后调整 ListCtrl 的大小以填充剩余部分。

于 2013-10-21T16:48:45.087 回答