简介
本文书面支付使用默认MFC CSplitterWnd的对象的基础。我找了一个长的时间使用对象的基本介绍,但只能找到子类或改编的CSplitterWnd的教程。我希望这篇文章可以帮助那些人,像我一样,只想一个基本的介绍的基本对象。背景
一个CSplitterWnd或拆分窗口是一种分裂成两个或两个以上不同的窗格屏幕(见截图或应用程序如3D编辑)。窗格本身通常是充满了一个CView或CWnd派生的对象提供一个文档的不同意见(或用户界面功能)。
分割窗口有两种形式 - 静态和动态。本教程将只包括静态分离器,因为动态的稍微复杂一点。两者之间的主要区别是一个动态的分隔器可以由用户,而静态分离器不能分裂和崩溃。使用代码步骤1 - 声明数据
使用AppWizard创建一个新的文档/视图支持的单文档应用程序。添加到你的主框架的头文件和一个布尔标志分配器management.CSplitterWnd m_mainSplitter CSplitterWnd对象;BOOL m_bInitSplitter;
m_mainSplitter将分成两个窗格像上面的截图的窗口。布尔标志将被用于检查分离器已经设置管理调整大小之前。确保在你的主框架类的构造函数初始化布尔值FALSE。第2步 - 创建分配器
拆分窗口应建立在主框架窗口的客户区的初始化。在您的主框架类的OnCreateClient消息添加一个函数,插入分离器创建代码如下:/ /计算客户端大小CRECT河;GetClientRect(安培; CR);如果(!m_mainSplitter.CreateStatic(这一点,1,2)){ MESSAGEBOX("错误设置分路帧quot;!
60; "初始化错误quot;,MB_OK | MB_ICONERROR)!;
返回FALSE;}
CreateStatic()的参数是父窗口(本)的数量或行和列。客户端矩形的大小是上浆后获得帮助。步骤3 - 创建的意见
分配器在每个窗格中,除非它嵌套在一个分配器,必须重视它,它可以显示一个视图。 CreateStatic呼叫后,使用下面的代码创建一个默认视图窗格。请注意,在分配器的每一列必须有一个观点,因为它不会有一个嵌套的分离器内创建。这引起了我很多的问题(理解上意见的要求),所以需要花费一些时间,在不同的代码样品,以获得更深入的了解。布尔标志,然后更新为true,表示分割已created.if(!m_mainSplitter.CreateView(0,0, RUNTIME_CLASS(CSplitterWindowTutorialView) CSIZE(cr.Width()/ 2,cr.Height()),pContext)){ MESSAGEBOX("错误设置分路帧quot;!
60; "初始化错误quot;,MB_OK | MB_ICONERROR)!;
返回FALSE;}如果(!m_mainSplitter.CreateView(0,1,
RUNTIME_CLASS(CSplitterWindowTutorialView)
CSIZE(cr.Width()/ 2,cr.Height()),pContext))
{ MESSAGEBOX("错误设置分路帧quot;!
160; "初始化错误quot;,MB_OK | MB_ICONERROR)!; 返回FALSE;}m_bInitSplitter = TRUE;
要使用的RUNTIME_CLASS(CSplitterWindowTutorialView),你必须包括在MainFrm.cpp您的视图类的头文件,包括你在你的视图类头文档类之前:#ENDIF / / _MSC_VER GT; 1000。
这将允许您使用您的视图类中的主框架类。会出现很多问题,如果你不包括您虽然在视图类的头文件类 - 另一件事需要注意的!第4步 - 更换返回值
Replacereturn CFrameWnd的:OnCreateClient(lpcs,pContext);
withreturn为TRUE;
从现有代码的默认返回值不会显示我们的工作,因为它返回到框架窗口的默认方法。第5步 - 管理调整大小
SetRowInfo和SetColumnInfo负责管理分割的大小。添加的WM_ONSIZE消息处理程序,并添加下面的代码:无效的CMainFrame::OnSize(UINT nType,INT,INT CX CY){ CFrameWnd的:OnSize(nType,CX,CY); CRECT河; GetWindowRect(安培; CR); (m_bInitSplitter放大器;放大器; nType = SIZE_MINIMIZED) { m_mainSplitter.SetRowInfo(0,CY,0); m_mainSplitter.SetColumnInfo(0,cr.Width()/ 2,50); m_mainSplitter.SetColumnInfo(1,cr.Width()/ 2,50); &
#160; m_mainSplitter.RecalcLayout(); }}
在上面的代码,我们首先检查分割已通过检查布尔值初始化。这种检查是必要的,因为我觉得一个WM_SIZE消息是通过帧之前创建的方法是跑 - 因此将不存在的对象第一次运行此代码,就会崩溃,如果你没有检查它的存在。
应用程序现在应该运行,并提供类似的文章开始的截图!我可能会在本系列的第二篇文章添加添加进一步嵌套的分配器和其他表单上的意见!敬请期待...