目前在我的项目中,我有一个小组,其中包含的内容如下:
问题在于,当面板展开时,它会在按钮所在的位置下方产生浪费的空间,并且当面板收缩时也会出现相反的问题,这意味着在收缩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,我希望我遗漏了一些东西,我不会那样做。
答案 0 :(得分:0)
当调整包含它们的窗口大小时,Sizer提供首次通过默认行为。
但是,如果您需要默认行为以外的其他内容,则必须自己处理窗口调整大小事件,并重新计算小部件大小。
在你的情况下,你需要确定其他小部件的总“漂亮大小”,从窗口的新大小中减去它,并调整ListCtrl的大小以填充余数。
答案 1 :(得分:0)
我将这个问题交叉发布到wx-users邮件列表并收到了这个答案:
在垂直大小调整器中,EXPAND标志仅控制大小 控制水平方向。对于垂直方向, “比例”参数是相关的。
为搜索控件和底部水平设置0的比例 box sizer。
为列表框设置1的比例。
这应该会给你你想要的行为。
虽然答案没有提供正确的合同行为,但它确实提供了正确的扩展行为,在我看来更为重要。