名扬数据:如何去实现VC++的混合静态分裂视窗

将View控件的指针传入的目的要告诉该函数该子视图已经完成数据更新,pHint指向记录更新视图所需额外信息的控件。调用该函数时。该函数不需要再调用该子视图的OnUpdate进行数据更新。觉得有必要跟大家好好探讨下这个问题了接下来我详细给大家讲下怎么实现VC++混合静态分裂视窗。有不少朋友过来问我怎么实现VC++混合静态分裂视窗。

首先是二分裂视窗的类型:一是动态分裂,视窗的分裂可分为两种类型。二是静态分裂,动态分裂可以让使用者通过拖曳分裂方块的使用,将视窗分裂。但是动态分裂最多只可以将视窗分裂为22个子视窗,不能进行混合分裂视窗,所有子视窗的属性和父视窗都是一样的而且子视窗的数据通常来源于同一处。而静态分裂,使用者除了可以调整子视窗的大小和进行混合分裂视窗外,最多可将视窗分裂为1616个子视窗,每个子视窗可以有各自不同的视图类CView各个子视窗显示的数据可以来自于不同的数据源。不管是要创建动态分裂视窗还是静态分裂视窗,都必需要利用MFCCSplitterWnd类别来完成视窗的分裂。

混合分裂视窗必需完成三件工作:混合分裂视窗是指在子视窗中进行视窗的再分裂MFC框架下。⑴在视窗框架类别中定义CSplitterWnd控件为其属性(数据成员),为静态分裂子视窗填充视图;⑵重载视窗框架类别中的OnCreateCli函数(CFrameWnd::OnCreateCli建立静态分裂子视窗;⑶建立维持各子视窗同步更新的机制。

利用MFCAppWizard生成一个单文档应用程序,首先应用顺序的CMainFram类别中声明CSplitterWnd类别的数据成员。重载CMainFram类别中的OnCreateCliLPCREA TESPUCT,其次。CCreateContext*pContext函数。该函数中利用CsplitterWnd类别的构造函数CreatStaticCWnd*pParentWnd,intnRows,intnCols,DWORDdwstyle,UINTnID创建混合静态分裂子视窗,即在CreatStatic分裂出的子视窗中利用CsplitterWnd类别的控件再一次分裂视窗。

CreatStatic函数的参数含义为:pParentWnd准备建立静态分裂视窗的视窗框架控件的指针;nRow和nCol准备建立静态分裂视窗行数nRow与列数(nCol,创立的静态分裂子视窗个数为nRownCol个,这两个参数最小不得小于0最大不可超过16dwstyle设定子视窗的形式;nID静态分裂的代号(ID此代号预设为AFX_IDW_PA NE_FIRST若静态分裂视窗位于另一个分裂视窗内时,不可以使用默认值,可以利用CsplitterWnd类别的成员函数IdFromRowColintrow,因此。intcol获得。利用CsplitterWnd类别的成员函数CreatViewintrow,intcol,CruntimeClass*pViewClass,SIZEsizeinit,CcreateContext*pContext为静态分裂子视窗填充视图,将视图与子视窗关联时必需先完成子视窗的创立。

CreatView函数的参数含义为: 其指定的方式是以表示该子视窗所在行列位置;row和col指定准备建立View控件的子视窗。该类别需要被声明为Run-Tim类别;pViewClass指定用于建立子视窗View控件的View类别。以及View控件之变量的指针,SizeiniView控件的起始大小;pContext一个指向记录应用顺序所使用的视窗框架控件、Document控件。此参数在CMainFrame::OnCreateCli函数被调用时传入,再由该函数传送给此函数。

参数cxIdeal和cxMin指定子视窗的宽度和最小宽度,cyIdeal和cyMin指定子视窗的高度和最小高度,使用这两个函数调整子视窗的大小后还应该使用该类别的成员函数RecalLayout重新调整视窗框架的布局。如果要设定视窗框架里的活动子视窗,可以通过CsplitterWnd类别的成员函数SetA ctivePanintrow,CsplitterWnd类别的成员函数SetColumnInfointcol,intcxIdeal,intcxMin和SetRowInfointrow,intcyIdeal,cyMin为设置子视窗的宽度和高度。intcol,CWnd*pWnd=NULL来完成,该函数指定子视窗的方式有两种,一是指出子视窗所在行列,二是传入指向该子视窗的控件指针。[Page]

将视窗分裂成多个子视窗后,整个视窗顺序中将存在多个View控件。当在其中一个View控件执行更新操作时,如何让其它View控件同步更新数据?可以通过文档类别(CDocumentUpdateA llViewCView*pSender,最后LPA RA MlHint,CObject*pHint成员函数的调用,再由该函数分别调用目前存在于视窗顺序中各View控件的OnUpdate函数来完成数据的同步更新。

UpdateA llView函数的参数含义为:如果传入NULL表示所有视图都要执行更新操作;pSender指向引发更新操作的View控件指针。需要传送的额外信息参数;lHint用于传送更新视图时。