文档详情

框架窗口文档和视图.ppt

发布:2017-11-15约3.06万字共61页下载文档
文本预览下载声明
第7章 框架窗口、文档和视图 7.1框架窗口 7.2文档及其序列化 7.3视图及视图类 7.4文档视图结构 7.1框架窗口 7.1.1主窗口和文档窗口 主窗口是应用程序直接放置在桌面上的那个窗口,每个应用程序只能有一个主窗口,主窗口的标题栏上往往显示应用程序的名称。 文档窗口对于SDI程序来说,它和主窗口是一致的,即主窗口就是文档窗口;而对于MDI程序,文档窗口是主窗口的子窗口,如图。文档窗口一般都有相应的可见边框,它的客户区是由相应的视图来构成的,因此可以说视图是文档窗口内的子窗口。文档窗口时刻跟踪当前处于活动状态的视图的变化,并将用户或系统产生的命令消息传递给当前活动视图。而主窗口负责管理各个用户交互对象并根据用户操作相应地创建或更新文档窗口及其视图。 7.1框架窗口 7.1.2窗口风格的设置 窗口风格 窗口风格通常有一般和扩展两种形式。这两种形式的窗口风格可在函数CWnd::Create或CWnd::CreateEx参数中指定,CreateEx函数可同时支持以上两种风格,而CWnd::Create只能指定窗口的一般风格。需要说明的是,对于控件和对话框这样的窗口来说,它们的窗口风格可直接通过其属性对话框来设置。 需要说明的是,除了上述风格外,框架窗口还有以下三个自己的风格。它们都可以在PreCreateWindow重载函数中指定。 FWS_ADDTOTITLE 该风格指定相关的信息如文档名添加到框架窗口标题的后面。 FWS_PREFIXTITLE 该风格使得框架窗口标题中的文档名显示在应用程序名之前。 FWS_SNAPTOBARS 该风格用来调整窗口的大小,使它刚好包含了框架窗口中的控制栏。 7.1框架窗口 用MFC AppWizard设置 7.1框架窗口 修改CREATESTRUCT结构 窗口创建之前,系统自动调用PreCreateWindow虚函数。在用MFC AppWizard创建SDI/MDI应用程序结构时,MFC已为主窗口或文档窗口类自动重载了该虚函数。可以在此函数中通过修改CREATESTRUCT结构来设置窗口的绝大多数风格。 例如,在SDI程序中,框架窗口默认的风格是WS_OVERLAPPEDWINDOW和FWS_ADDTOTITLE的组合,更改风格代码: BOOL CMainFrame::PreCreateWindow(CREATESTRUCT cs) { // 新窗口不带有[最大化]按钮 cs.style = ~WS_MAXIMIZEBOX; // 将窗口的大小设为1/3屏幕并居中 cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3; cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3; cs.y = ((cs.cy * 3) - cs.cy) / 2; cs.x = ((cs.cx * 3) - cs.cx) / 2; // 调用基类的PreCreateWindow函数 return CFrameWnd::PreCreateWindow(cs); } 对于MDI程序,文档窗口的风格可用下列的代码更改: BOOL CChildFrame::PreCreateWindow(CREATESTRUCT cs) { // 创建不含有[最大化]按钮的子窗口 cs.style = ~WS_MAXIMIZEBOX; // 调用基类的PreCreateWindow函数 return CMDIChildWnd::PreCreateWindow(cs); } 7.1框架窗口 使用ModifyStyle和ModifyStyleEx CWnd类中的成员函数ModifyStyle和ModifyStyleEx也可用来更改窗口的风格,其中ModifyStyleEx还可更改窗口的扩展风格。这两个函数具有相同的参数,其含义如下。 BOOL ModifyXXXX( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 ); 参数dwRemove用来 指定需要删除的风格,dwAdd用来指定需要增加的风格,nFlags表示SetWindowPos的标志,0(默认)表示更改风格的同时不调用SetWindowPos函数。 由于框架窗口在创建时不能直接设定其扩展风格,因此只能通过调用ModifyStyle函数来进行。 7.1框架窗口 [例Ex_Vscroll] 多文档(MDI)的子文档窗口增加垂直滚动条。 (1)用MFC AppWizard创建一个多文档应用程序。 (2)用ClassWizard
显示全部
相似文档