关于wxAuiManger中子窗口尺寸更改的问题 Topic is solved

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
secondsen
Earned a small fee
Earned a small fee
Posts: 18
Joined: Tue Apr 02, 2013 4:14 pm

关于wxAuiManger中子窗口尺寸更改的问题

Post by secondsen » Sun Apr 14, 2013 7:14 am

我做的窗口如图所示。。隐去了工具栏和菜单栏。

我想让子窗不能进行宽度更改,但是左侧的两个窗口,可以进行长度的更改。。但是怎么也不成功。。。求教。。。

class _2nDs_Frame : public wxFrame
_2nDs_Frame::OnInit 的代码如下

最后几行 我设置了.MinSize(278,128)是有用的。。。左侧的两个窗口宽度不能缩小了,但是我加上.MaxSize(278,1024)之后。。。左侧的窗口仍然可以拉宽。。。

Code: Select all

    AuiMgr.AddPane(CreateNotebook(), wxAuiPaneInfo().Name(wxT(CLIENT_TILE_SELECT_WINDOW_NAME)).
                  Left().CaptionVisible(false).Layer(1).Position(1).PaneBorder(false));

    wxTreeCtrl* pTreeC = CreateTreeCtrl();
    AuiMgr.AddPane(pTreeC, wxAuiPaneInfo().
                  Name(wxT(CLIENT_MAP_TREE_WINDOW_NAME)).
                  Bottom().CaptionVisible(false).Layer(1).Position(1));

    pPanel = new _2nDs_Panel(this, wxID_ANY, wxPoint(277,0), wxSize(1000,1000));
    AuiMgr.AddPane(pPanel, wxAuiPaneInfo().
                  Name(wxT(CLIENT_DRAW_MAP_WINDOW_NAME)).
                  CaptionVisible(false).CenterPane());

    int i, count;
    wxAuiPaneInfoArray& all_panes = AuiMgr.GetAllPanes();
    for (i = 0, count = all_panes.GetCount(); i < count; ++i)
        if (!all_panes.Item(i).IsToolbar())
            all_panes.Item(i).Hide();
    AuiMgr.GetPane(wxT(CLIENT_TILE_SELECT_WINDOW_NAME)).Show().Left().Layer(0).Row(0).Position(0).MinSize(278,128);
    AuiMgr.GetPane(wxT(CLIENT_MAP_TREE_WINDOW_NAME)).Show().Left().Layer(0).Row(0).Position(0).MinSize(278,128);
    AuiMgr.GetPane(wxT(CLIENT_DRAW_MAP_WINDOW_NAME)).Show().Movable(0);

    AuiMgr.Update();
Image

kipade
Earned some good credits
Earned some good credits
Posts: 118
Joined: Fri Nov 11, 2011 2:45 am
Location: China

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by kipade » Fri Apr 19, 2013 8:52 am

说实话,这个我也不知道如何通过wxAui的既定义方法来达成
但是,有一点你需要知道的,就是,wxAUI使用Dock来布局每个Panel,整个窗口使用一个大的Sizer来布局所有的Dock,这就和我们正常使用Sizer来布局一样,大概是这样子的吧。现在,看一眼Dock相关的数据结构,它有个min_size的成员,而没有max_size这个成员,所以,PaneInfo里面设置MinSize能反映到这儿来,而MaxSize的调用没反映到这儿来
我不知道应该怎么通过wxAui的一系列方法来达成你的目标,但是,如果实在不行的话,你可以改造一下Dock类,加个max_size
这个我试了,完全可行
Slackware GNU/Linux
wxWidgets-3.0.3

kipade
Earned some good credits
Earned some good credits
Posts: 118
Joined: Fri Nov 11, 2011 2:45 am
Location: China

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by kipade » Fri Apr 19, 2013 9:04 am

顺便说下,wxAui布局每个dock的时候,使用了wxEXPAND特性,所以,一个dock只有一个panel时,这个panel总是会占据整个dock区域,从而使得,即便你的panelnfo里面有MaxSize,到这儿了也仍然将是无效
也许,这里的MaxSize是供一个Dock管理一组Panel时使用?
没去细看
我说的这些,简单的看一下wxAui的代码就知道了
很复杂的但也还能看出点线索
时间仓促,也许我理解的有些问题,欢迎拍砖
Slackware GNU/Linux
wxWidgets-3.0.3

secondsen
Earned a small fee
Earned a small fee
Posts: 18
Joined: Tue Apr 02, 2013 4:14 pm

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by secondsen » Fri Apr 19, 2013 2:01 pm

很感谢你的解答。。我想问一下那么怎么改造dock相关的类加一个max_size呢?我都不知道是哪个类。。望指教。。或是能够指点一下需要哪些相关的资料,我自己去看看也好。。。非常感谢 :D

kipade
Earned some good credits
Earned some good credits
Posts: 118
Joined: Fri Nov 11, 2011 2:45 am
Location: China

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by kipade » Mon Apr 22, 2013 1:06 am

改造wxAuiDockInfo类我认为还是比较简单的
不知道有没有不改造源码,而通过wxAuiPaneInfo的MaxSize来实现的
有谁知道的话,希望分享一下
Slackware GNU/Linux
wxWidgets-3.0.3

secondsen
Earned a small fee
Earned a small fee
Posts: 18
Joined: Tue Apr 02, 2013 4:14 pm

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by secondsen » Mon Apr 22, 2013 11:31 am

我找到了 wx/aui/framemanager.h 给 wxAuiDockInfo中添加了 max_size 包括 赋值那些都改了,有min的地方后面就加上max。。但是也没有什么变化啊,是不是还要在别的地方进行修改啊?

kipade
Earned some good credits
Earned some good credits
Posts: 118
Joined: Fri Nov 11, 2011 2:45 am
Location: China

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by kipade » Tue Apr 23, 2013 12:33 am

当然了,你只加了成员变量,没有用这个变量限定界面变化,更没有为这个变量赋值
看代码吧,很简单了,我就不多说了
我也试过了好使才告诉你的
Slackware GNU/Linux
wxWidgets-3.0.3

secondsen
Earned a small fee
Earned a small fee
Posts: 18
Joined: Tue Apr 02, 2013 4:14 pm

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by secondsen » Tue Apr 23, 2013 3:56 am

非常非常感谢。。我之前也自己改了代码来者。。改错地方了。。。 :(

我在framemanager.cpp 2200行附近改了一下代码,加了max_size的判断,max_size果然生效了。

非常感谢LS!!!!

kipade
Earned some good credits
Earned some good credits
Posts: 118
Joined: Fri Nov 11, 2011 2:45 am
Location: China

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by kipade » Tue Apr 23, 2013 8:49 am

儒子可教也

有空到wxcn.org来转转
Slackware GNU/Linux
wxWidgets-3.0.3

secondsen
Earned a small fee
Earned a small fee
Posts: 18
Joined: Tue Apr 02, 2013 4:14 pm

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by secondsen » Tue Apr 23, 2013 2:42 pm

LS的论坛我去过啦,都没啥人哇?

kipade
Earned some good credits
Earned some good credits
Posts: 118
Joined: Fri Nov 11, 2011 2:45 am
Location: China

Re: 关于wxAuiManger中子窗口尺寸更改的问题

Post by kipade » Wed Apr 24, 2013 7:59 am

建站不久
再者,学习wx的同学还不是多数
不过,我只要上班,就会在那儿,我上不了Q
这里也是偶尔来看一眼
大家要是都去的话人不就自然变多了吗
Slackware GNU/Linux
wxWidgets-3.0.3

Post Reply