0

我有一个框架,顶部有一些东西,下面有一个 wxScrolledWindow。滚动窗口包含用户选择的图像。我希望框架收缩包装,以便背景永远不会显示在滚动窗口中。我在框架中使用 BoxSizer。一切正常,直到用户拖动边框以增加查看区域。他走得太远了,背景显示。我已经尝试了至少十几种方法,但是当用户将边框拖到滚动条消失的位置之外时,我无法让窗口的边框恢复原状。加载图像时,滚动窗口使用正确的数字调用 SetMaxClientSize(),但没有任何效果。几张照片会有所帮助。我刚刚把右边的边框拖到右边,增加了查看区域。这是它的样子:

在此处输入图像描述

我希望边框回弹,所以它看起来像这样:

在此处输入图像描述

Windows 7 x64,wxWidgets 2.9.4

4

2 回答 2

1

重新实现 size 事件处理程序。如果新尺寸比您想要的大,请将其修改为您接受的最大尺寸。然后调用基本实现。

void MyFrame::OnSize(wxSizeEvent& event)
{
    wxSize new_size = event.GetSize()

    wxSize max_size = ... calculate max size ....

    if ( new_size.GetHeight() > max_size.GetHeight() {
        new_size.SetHeight(  max_size.GetHeight() );
    if ( new_size.GetWidth() > max_size.GetWidth() {
        new_size.SetWidth(  max_size.GetWidth() );

    event.SetSize( new_size );
    wxFrame::OnSize( event );

另外,请注意文档中的此注释:

重要提示:Sizer(请参阅 Sizer 概述)依赖于 size 事件才能正常运行。因此,在基于 sizer 的布局中,不要忘记在您捕获的所有 size 事件上调用 Skip(并且在您不需要时根本不要捕获 size 事件)。

于 2012-10-23T11:57:22.843 回答
0

Ravenspoint 的答案似乎不起作用(使用 wxWidgets 3.0.3 或 2.8.12)。即使按照您的建议减小和传播事件大小,框架的大小也会调整得比期望的大。这是一个例子: 在此处输入图像描述

于 2018-01-26T19:50:51.140 回答