Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 防止wxScrolledWindow在比例为0时滚动_C++_User Interface_Layout_Wxwidgets - Fatal编程技术网

C++ 防止wxScrolledWindow在比例为0时滚动

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

我正在尝试布局我的wxWidgets窗口

我有一个垂直的
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);