C++ 防止wxScrolledWindow在比例为0时滚动
我正在尝试布局我的wxWidgets窗口 我有一个垂直的C++ 防止wxScrolledWindow在比例为0时滚动,c++,user-interface,layout,wxwidgets,C++,User Interface,Layout,Wxwidgets,我正在尝试布局我的wxWidgets窗口 我有一个垂直的wxBoxSizer和一个面板,proporty=1,还有一个wxscrolledwindoww,proporty=0。我希望wxScrolledWindow的垂直高度足够大,以容纳wxButtons,它们是水平布置的 但是,如果proporty=0出现一个垂直滚动条,即使我没有通过wxVSCROLL标志。我尝试了设置proporty=1,但这意味着wxScrolledWindow将比需要的更高 以下是问题的图像,取自wxFormBuild
wxBoxSizer
和一个面板,proporty=1
,还有一个wxscrolledwindoww
,proporty=0
。我希望wxScrolledWindow
的垂直高度足够大,以容纳wxButton
s,它们是水平布置的
但是,如果proporty=0
出现一个垂直滚动条,即使我没有通过wxVSCROLL
标志。我尝试了设置proporty=1
,但这意味着wxScrolledWindow
将比需要的更高
以下是问题的图像,取自wxFormBuilder内部(在实际的wxWidgets程序中也会出现相同的行为,其中WxCrolledwindow
具有比例=0
:
以下是我努力实现的目标:
请某人解释如何在C++中实现这一点(或者WxFraseBuudor,没关系);我浏览了wxWidgets文档,但我是GUI库的新手,因此非常感谢您的帮助。如果您不需要垂直滚动条,只需禁用它,否则布局代码实际上不知道您的滚动窗口需要的大小 以下是创建所需布局的内容(您可以将其粘贴到
MyFrame
ctor末尾的最小示例中进行测试):
auto const sv=新的wxBoxSizer(wxVERTICAL);
sv->Add(新的wxButton(这个,wxID_ANY,“按钮0”),wxSizerFlags(1.Border());
自动常数p=新wxScrolledWindow(本);
p->SetScrollRate(10,0);
auto const sh=新wxBoxSizer(wxHORIZONTAL);
对于(int i=0;i<10;++i)
sh->Add(新的wxButton(p,wxID_ANY,wxString::Format(“按钮%d”,i)),wxSizerFlags().Border());
p->SetSizer(sh);
sv->Add(p,wxSizerFlags().Expand());
固定器(sv);
这是可行的,但在我调整窗口大小之前,水平滚动条有时似乎会与按钮重叠。是否有任何方法可以防止这种行为?如果动态执行此操作,即在窗口创建期间不执行此操作,则需要调用布局()
(在窗口创建期间,当窗口大小调整到初始大小时,会自动执行此操作)。如果问题仍然存在,您需要在最小样本中复制它,以显示您到底在做什么,否则很难说更多。嗯,标志wxALWAYS\u show\u SB
似乎可以解决问题。感谢您的帮助。
auto const sv = new wxBoxSizer(wxVERTICAL);
sv->Add(new wxButton(this, wxID_ANY, "Button 0"), wxSizerFlags(1).Border());
auto const p = new wxScrolledWindow(this);
p->SetScrollRate(10, 0);
auto const sh = new wxBoxSizer(wxHORIZONTAL);
for ( int i = 0; i < 10; ++i )
sh->Add(new wxButton(p, wxID_ANY, wxString::Format("Button %d", i)), wxSizerFlags().Border());
p->SetSizer(sh);
sv->Add(p, wxSizerFlags().Expand());
SetSizer(sv);