2013-10-21 21 views
0

目前在项目中,我与他提出了这样的事情面板:wxWidgets的:尺寸仪和浪费的空间

  • 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,我希望我错过了一些东西,而且我不必那样做。

回答

0

I交叉张贴了这个问题的WX-users邮件列表和接收这样的回答:

在垂直尺寸确定器,在EXPAND标志只控制在水平方向上的 控制的大小。对于垂直方向, “比例”参数是相关的。

为搜索控件和底部水平仪设置比例0。

设置列表框的比例为1。

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

尽管答案没有提供正确的承包行为,但它确实提供了正确的扩展行为,在我的案例中这是更重要的。

0

当包含它们的窗口被调整大小时,Sizers会提供第一遍默认行为。

但是,如果您需要的不是缺省行为,则必须自己处理窗口大小调整事件,并重新计算小部件大小。

在你的情况下,你需要确定其他小部件的总体“好大小”,从窗口的新大小中减去它,并调整ListCtrl的大小以填充余数。