如何在wxScrolledWindow中缩小包装图像

时间:2012-10-23 07:05:29

标签: wxwidgets

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

enter image description here

我希望边框能够快速恢复,所以它看起来像这样:

enter image description here

Windows 7 x64,wxWidgets 2.9.4

2 个答案:

答案 0 :(得分: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(请参阅Sizers概述)依赖于大小事件   功能正常。因此,在基于sizer的布局中,不要忘记   在你捕获的所有大小事件上调用Skip(并且不捕获大小事件   当你不需要的时候。)

答案 1 :(得分:0)

Ravenspoint的回答似乎不起作用(使用wxWidgets 3.0.3或2.8.12)。即使事件大小减小并按照您的建议传播,帧的大小也会大于所需大小。这是一个例子: enter image description here