文/老闫 一 关于分割窗口的分割器CSplitterWnd类 MFC中的分割窗口类-CSplitterWnd类封装分割器窗口的所有功能。分割器窗口指含有多个窗格的窗口,多窗口可以容纳相同的视图或不同的视图。 1.构造对象 CSplitterWnd类首先构造对象,在VS2010软件自动搭建的构架内部,分拆窗口的实现在CMainFrame主框架中实现,在主框架的类的定义中定义一个公有(public) CSplitterWnd对象,供BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)函数调用,实现窗口分拆的目的。 2.静态创建与动态创建 动态创建函数CSplitterWnd类有一个Create()函数,用于创建动态分割器窗口并将该窗口链接到CSplitterWnd类对象。 静态创建函数CSplitterWnd类有一个CreateStatic()函数,用于创建动态分割器窗口并将该窗口链接到CSplitterWnd类对象。
静态创建调用
2)在父框架类中定义一个CSplitterWnd类型的成员对象。 3)重载父框架类的CFrameWnd::OnCreateClient成员函数。 4)在重载的CFrameWnd::OnCreateClient函数中调用CSplitterWnd成员对象的Create函数。 案例代码: 注:这里m_splitterwnd为 CSplitterWnd类对象。 } 二 关于分拆窗口中的视构建 1)客户区概念 a)先学习一下OnCreateClient这个函数: CFrameWnd::OnCreateClient调用由框架在 OnCreate时的执行。 语法 virtual BOOL OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext ); 参数: lpcs 对于Windows CREATESTRUCT 结构的指针。 pContext 为 CCreateContext 结构的指针。 返回值:如果成功,非零;否则为0。 备注: 不要调用此函数。 此函数的尽可能默认实现在 pContext创建从已提供的信息 CView 对象。 重写此函数重写在 CCreateContext 对象传递的值或更改方法控制在框架窗口的主要客户端区域中创建。 您可以重写的 CCreateContext 成员。CCreateContext 选件类所述。 System_CAPS_note注意 不要替换在 CREATESTRUCT 结构中传递的值。 它们仅适用于信息性使用。 例如,如果要重写初始窗口矩形重写 CWnd 成员函数 PreCreateWindow。 要求:头文件位置: afxwin.h,请参阅CFrameWnd Class层次结构图 2) 理解客户区 客户区分为窗口框架客户区和视图客户区,窗口框架客户区包容视图;框架客户区以外为框架非客户区。这里为框架客户区,在这个客户区里可以构建视图窗口,视图视(窗口)内包含视图客户区,这里不讨论。 在框架客户区内部构造分拆器,说明一个根本的目的就是要分拆框架窗口的客户区,让不同的视放入不同的框架客户区内部。 三)建立视 1)让我们看看嵌入OnCreateClient()中的下面代码: m_splitterwnd.CreateView(0,0,RUNTIME_CLASS(CMyDaohangView),CSize(250,100),pContext); 调用了如下构建函数:
2) CCreateContext 结构这里我对CRuntimeClass* pViewClass类产生的指针很感兴趣,研究了一下如下: CCreateContext Structure
CCreateContext 结构,在创建与文档框架窗口和视图时。 |
成员 | 类型 | 将针对 |
---|---|---|
m_pNewViewClass | CRuntimeClass* | 创建的新视图的CRuntimeClass 。 |
m_pCurrentDoc | CDocument* | 现有文档与新的视图。 |
m_pNewDocTemplate | CDocTemplate* | 文档模板与新的MDI框架窗口的创建。 |
m_pLastView | CView* | 附加视图进行建模的原始视图中,在拆分窗口视图中创建或第二个视图的创建文档中的。 |
m_pCurrentFrame | CFrameWnd* | 其他框架窗口进行建模的框架窗口,在第二个框架窗口中创建文档中的。 |
当文档模板创建文档及其关联的元素时,它将验证 CCreateContext
结构中存储的信息。 例如,不应使用不存在创建视图文档。
![]() |
---|
所有在 |
功能下面列出的“并查看的成员使用CCreateContext
”。如果您计划中重写这些属性,请参考这些函数的声明特定的信息。
这是一些通用准则:
当通过,因为windows创建的参数,在 CWnd::Create
,CFrameWnd::Create
和 CFrameWnd::LoadFrame
,创建上下文指定应连接的窗口。 对于大多数窗口,整个结构是可选的,并且 NULL
指针可以通过。
对于可重写的成员函数,例如 CFrameWnd::OnCreateClient
,CCreateContext
参数是可选的。
对于视图创建涉及的成员函数时,必须提供足够的信息来创建视图。 例如,在拆分窗口的第一个视图,必须提供视图选件类信息,并且当前文件。
通常,因此,如果使用框架默认,您可以忽略 CCreateContext
。 如果尝试更高级的修改,Microsoft基础类库选件源代码或示例程序,例如VIEWEX中,将引导您完成。 如果忘记一个必选参数,结构断言将告知您要忘记了。
有关 CCreateContext
的更多信息,请参见MFC示例 VIEWEX。
要求 标头: afxext.h
3)理解pContext
当我把
m_splitterwnd.CreateView(0,0,RUNTIME_CLASS(CMyDaohangView),CSize(250,100),pContext);里pContext指针设定为NULL编译不能通过,这个指针用于CreateView时指向创建描述表,这里可以检查RUNTIME_CLASS(CMyDaohangView)是否建立,则CreateView返回布尔类型校验框架客户区的视创建成功与否。
|
来自: 牛人的尾巴 > 《vs6.0-2010》