Page 1 of 1

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

Posted: Sun Apr 14, 2013 7:14 am
by secondsen
我做的窗口如图所示。。隐去了工具栏和菜单栏。

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

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

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

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

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

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

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

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

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

Posted: Mon Apr 22, 2013 1:06 am
by kipade
改造wxAuiDockInfo类我认为还是比较简单的
不知道有没有不改造源码,而通过wxAuiPaneInfo的MaxSize来实现的
有谁知道的话,希望分享一下

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

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

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

Posted: Tue Apr 23, 2013 12:33 am
by kipade
当然了,你只加了成员变量,没有用这个变量限定界面变化,更没有为这个变量赋值
看代码吧,很简单了,我就不多说了
我也试过了好使才告诉你的

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

Posted: Tue Apr 23, 2013 3:56 am
by secondsen
非常非常感谢。。我之前也自己改了代码来者。。改错地方了。。。 :(

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

非常感谢LS!!!!

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

Posted: Tue Apr 23, 2013 8:49 am
by kipade
儒子可教也

有空到wxcn.org来转转

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

Posted: Tue Apr 23, 2013 2:42 pm
by secondsen
LS的论坛我去过啦,都没啥人哇?

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

Posted: Wed Apr 24, 2013 7:59 am
by kipade
建站不久
再者,学习wx的同学还不是多数
不过,我只要上班,就会在那儿,我上不了Q
这里也是偶尔来看一眼
大家要是都去的话人不就自然变多了吗