多视图与文档的交互

CREATESTRUCT结构

CREATESTRUCT结构具有如下形式:
typedef struct tagCREATESTRUCT
{
  LPVOID  lpCreateParams;
  HANDLE  hInstance;
  HMENU   hMenu;
  HWND    hwndParent;
  int     cy;
  int     cx;
  int     y;
  int     x;
  LONG    style;
  LPCSTR  lpszName;
  LPCSTR  lpszClass;
  DWORD   dwExStyle;
} CREATESTRUCT;

CREATESTRUCT结构定义了传递给应用程序的窗口过程的初始化参数。
成员:

lpCreateParams 指向将被用于创建窗口的数据的指针。
hInstance 标识了拥有新窗口的模块的模块实例的句柄。
hMenu 标识了要被用于新窗口的菜单。如果是子窗口,则包含整数ID。
hwndParent 标识了拥有新窗口的窗口。如果新窗口是一个顶层窗口,这个参数可以为NULL。
cy 指定了新窗口的高。
cx 指定了新窗口的宽。
y 指定了新窗口的左上角的y轴坐标。如果新窗口是一个子窗口,则坐标是相对于父窗口的;否则坐标是相对于屏幕原点的。
x 指定了新窗口的左上角的x轴坐标。如果新窗口是一个子窗口,则坐标是相对于父窗口的;否则坐标是相对于屏幕原点的。
style 指定了新窗口的风格。
lpszName 指向一个以null结尾的字符串,指定了新窗口的名字。
lpszClass 指向一个以null结尾的字符串,指定了新窗口的Windows类名(一个WNDCLASS结构;更多的信息参见Win32 SDK文档)。
dwExStyle 指定了新窗口的扩展风格。 

CCreateContext

CCreateContext没有基类。
在主程序创建框架窗口、以及文档相关的视图时,会使用CCreateContext结构。

建立窗口时,此结构中的值用于连接构成文档的组件和文档数据的视图。仅当覆盖了创建过程时才需要使用CCreateContext。
CCreateContext结构包含了指向文档、框架窗口和文档模板的指针,包括了一个CRuntimeClass指针,CRuntimeClass标志了待创建的视图的类型。运行时类信息和当前文档指针用于动态地创建视图。下表列出了CCreateContext的每个成员的用法:

成员 用途
m_pNewViewClass 待创建的视图的CRuntimeClass
m_pCurrentDoc 将在其上创建视图的文档
m_pNewDocTemplate 待创建的新MDI框架窗口的文档模板
m_pLastView 待创建视图所依据的原始视图,例如在创建分裂窗口的视图或文档的第二个框架窗口时
m_pCurrentFrame 待创建框架窗口所依据的框架窗口,例如在文档上创建第二个框架窗口时


当在文档模板上创建一个文档及其相关的组件时,它检查存储在CCreateContext结构中的信息的有效性。例如,不能在一个不存在的文档上建立视图。
注意:
CCreateContext结构中的所有指针都是可选的,在不需要或者未知时可设为NULL。

· CCreateContext作为创建窗口时的参数,如CWnd::Create、CFrameWnd:Create和CFrameWnd::LoadFrame,CCreateContext指定了新窗口应连接到的地方。对多数窗口来说,整个结构都是可选的,可传递一个NULL指针。
· 对于可覆盖的函数,例如CFrameWnd::OnCreateClient,参数CCreateContext也是可选的。
· 对那些在创建视图时使用的函数来说,必须在调用时提供足够的信息以建立视图。例如,对分裂窗口中的第一个视图,必须提供视图的类信息和当前的文档。

一般说来,如果使用了框架的缺省设置,就可以忽略CCreateContext结构。如果想进行一些高级的修改,MFC类库源代码或例子程序(如VIEWEX)可以提供参考。如果记不清参数的使用,框架中提供的断言将有助于发现参数使用的错误。

CreateView

  virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext );
  ● row:窗格的行标,从0开始
  ● col:窗格的列标,从0开始
  ● pViewClass:视图的执行期类CRuntimeClass指针,可以用宏RUNTIME_CLASS获得
  ● sizeInit:一个SIZE(或者CSize)类型的数据,指定窗格的初始尺寸
  ● pContext:一般是由父窗口传递过来,包含窗口的创建信息
  返回值:如果创建成功,返回非零值(TRUE),否则返回0(FALSE)。
 
SetColumnInfo
 
  void SetColumnInfo( int col, int cxIdeal, int cxMin );
  ● col:切分窗口的列标识
  ● cxIdeal:指定分隔器窗口列的以像素表示的理想宽度。
  ● cxMin:指定分隔器窗口列以像素表示的最小宽度。
 
CWnd::MoveWindow

void MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE );
void MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );
 
 x 指定了CWnd 的左边的新位置
 y 指定了CWnd 的顶部的新位置
 nWidth 指定CWnd 的新宽度
 nHeight 指定CWnd 的新高度
 bRepaint 指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画。
 lpRect CRect对象或RECT结构,指定了新的大小和位置。

 

posted @ 2016-11-12 20:03  韵切  阅读(325)  评论(0编辑  收藏  举报