; &
#160;下载演示项目 - 14.2 KB
160; 下载源 - 3.65 KB &
#160;
{S0} 简介
;
是的,它的又一拆分窗口类。所以为什么我发布一个新的 &
#160; 类,当有很多相似的类?答案很简单。所有 在CodeProject拆分窗口类可以分为两部分恕我直言: &
#160; 这些来自原始的MFC CSplitterWnd的。他们期待尼斯
很多古典CSplitterWnd的优势,但派生 &
#160; 从CSplitterWnd的限制你只使用CView派生 在它窗户。 别人,我可以使用在各种Windows - 但是当我编译和测试
他们,他们不看漂亮的CSplitterWnd的。
在这篇文章中,我提供了一个类,它是不是从CSplitterWnd的派生。
0; 它允许您使用简单的CWnd派生的窗口。但它
; 结合原CSplitterWnd的专业。
160; 我从MFC源代码的某些例程。请可忍而读 这篇文章。这是我的第一篇文章:在CodeProject)。 特点
我CSimpleSplitterWnd设计的目标是模拟的基本 对CSplitterWnd的功能。有了这个类,你可以多次
60; 水平或垂直排列的窗格。它不提供自动
160; 分裂,共享的滚动条和路口跟踪。我没有觉得很 有用 - 但是,如果有足够多的人,谁做了,我可以添加一些 这些功能:)CSimpleSplitter想法(以CSplitterWnd的) &
#160; 是窗格窗口是相互独立的,因此他们也 负责他们的滚动和边界。
0; 使用代码
分配器布局是在构造函数: CSimpleSplitter(INT nPanes,UINT nOrientation = SSP_HORZ nMinSize = 30,INT nBarThickness = 3);
nPanes窗格的数量,应nOrientation
60; SSP_HORZ或SSP_VERT。 nMinSize是
60; 任何窗格的最小高度(或宽度) - 重要的是在重新计算 布局算法,当你调整分离器。 nBarThickness是 酒吧窗格之间的高度或宽度。所有这些属性保持不变 在分离器实例的生命周期。分离器和它的创造
窗格很简单: 布尔创建(的CWnd * pParent,UINT NID = AFX_IDW_PANE_FIRST);BOOL CreatePane(INT参数nIndex的CWnd * pPaneWnd,DWORD dwStyle, DWORD dwExStyle,LPCTSTR lpszClassName = NULL);
窗格索引从0到nPanes - 1。参数 dwStyle,dwExStyle和lpszClassName 通过pPaneWnd - GT; CreateEx()(如果你想绑定创建 一个窗格的窗口,而不是使用SetPane)。您可以指定 例如边界窗格有。在演示程序中,"大"窗格有WS_EX_CLIENTEDGE 扩展风格,而三个"平"窗格WS_EX_STATICEDGE 扩展样式。单独的分隔栏只是一个灰色的矩形,因此,如果您
; 不指定任何边缘,灰色的背景设置窗格窗口,您可以使用 在对话框中的分配器。
;
以下五个方法CSplitterWnd的方法类似, &
#160; 所以他们并不需要一个特殊的文件。&
#160; INT GetPaneCount()const的;无效SetPane(INT参数nIndex的CWnd * pPaneWnd);的CWnd * GetPane(INT参数nIndex)const的;虚拟无效SetActivePane(INT参数nIndex);的CWnd * GetActivePane(INT * pIndex)常量;
然而,设置窗格的宽度或高度使用不同的技术: 无效SetPaneSizes(const int的大小); &
#160;
通过nPanes整数数组。他们指定的相对大小
60; 窗格。您可以使用任何规模的,窗格的大小比例的 阵列成员的总和。当调整整个分离器,尺寸 窗格改变自己的实际大小比例。如果有必要,他们
0;调整m_nMinSize。 void GetPaneRect(int nIndex, CRect& rcPane) const;
void GetBarRect(int nIndex, CRect& rcBar) const;
,有了这些功能,您可以检索窗格分离器客户端的位置
坐标。酒吧的索引从1到nPanes - 1。
这就是所有。看看SimpleSplitterApp演示,特别是在CMainFrame::OnCreate中 代码,你就会知道一切! 兴趣点
当我编程的分离器,我很困惑,框架如何重绘 调整大小的窗口。如果调整的顶部或左边框,框架的第一只移动
; 窗口的内容在相应的方向,然后它调用的OnPaint()。 所以窗口重绘两次,并在分离器,这看起来丑陋。
幸运的是,有一个消息处理程序的CWnd::OnWindowPosChanging。
您可避免最初的移动内容,如果你看到SWP_NOCOPYBITS 正如你看到的CSimpleSplitter和CChildWnd代码。我 认为这是在许多情况下非常有用,分配器。 历史
60; 11。 2。 2004年 - 第一个版本发布 24。 3。 2004 - 一些错误固定(见下面的消息)。在SetPaneSizes
160; 功能,现在你应该通过唯一的相对大小,而不是绝对。