3.35如何编程改变 某个分割器窗口内 面板 的大小?

来源:互联网 发布:树形图软件 编辑:程序博客网 时间:2024/05/01 08:44

      就像希望 编程 改变 应用程序中某些视图 的大小一样,你可能也希望编程改变某些 分割器窗口内 面板的大小。然而,调用MoveWindow()或SetWindowPos()函数不能实现该目的。必须使用 不同的方法 来处理分割器窗口内的面板。如果打算实现一个改变分割器窗口内内面板大小的函数,遵循下面的步骤:

第1步:首先,执行一个稳健检查---相信我,我做了好大的努力才学会这种方法!从关联的C++对象中检索 分割器窗口 的处理,并检查该处理是否有效:

HWND hWnd=m_wndSplitter.GetSafeHwnd();

if( hWnd==NULL || !::IsWindow(hWnd) )      return;

第2步:调用GetColumnInfo()或GetRowInfo()得到 分割器窗口内 每个面板 包括的视图的当前尺寸,在每个GetXXXInfo()函数调用后,调用相应的SetXXXInfo()函数(SetColumnInfo()或SetRowInfo())来改变每个面板的大小:

 

 

第3步:当设置了分割器内包括的所有面板的大小时,调用RecalcLayout()告诉分割器自我更新。m_wndSplitter.RecalcLayout();

 

第4步:在子框架窗口内的WM_SIZE消息响应函数内调用OnResizeSplitters()函数。

附加注释:不要忘记稳健检查,它可防止可能出现的异常事件,因为在分割器本身创建之前,Windows在框架窗口的创建过程中发送WM_SIZE消息。因为每当父窗口检索到WM_SIZE消息时,我们的代码就视图改变分割器窗口的大小。所以,我们必须保护这种情况,而且无论如何它是一种很好的防御性编程技术。

 

原创粉丝点击