第7章框架窗口、文档和视图 71框架窗旦 7.2文档及其序列化 作业1 73视图及视图类 74文档视图结构 作业2
第7章 框架窗口、文档和视图 7.1框架窗口 7.2文档及其序列化 作业1 7.3视图及视图类 7.4文档视图结构 作业2
7.1框架窗口 7.1.1主窗口和文档窗口 主窗口是应用程序直接放置在桌面上的那个窗口,每个应用程序只能有一个 主窗口,主窗口的标题栏上往往显示应用程序的名称 文档窗口对于SDI程序来说,它和主窗口是一致的,即主窗口就是文档窗口 而对于MDI程序,文档窗口是主窗口的子窗口,如图。文档窗口一般都有相 应的可见边框,它的客户区是由相应的视图来构成的,因此可以说视图是文 档窗口内的子窗口。文档窗口时刻跟踪当前处于活动状态的视图的变化,并 将用户或系统产生的命令消息传递给当前活动视图。而主窗口负责管理各个 用户交互对象并根据用户操作相应地创建或更新文档窗口及其视图。 文件Q)编暗)查看00留口①帮助0 文档窗口 主窗口 图71MD应用程序的框架窗口
7.1框架窗口 7.1.1主窗口和文档窗口 主窗口是应用程序直接放置在桌面上的那个窗口,每个应用程序只能有一个 主窗口,主窗口的标题栏上往往显示应用程序的名称。 文档窗口对于SDI程序来说,它和主窗口是一致的,即主窗口就是文档窗口; 而对于MDI程序,文档窗口是主窗口的子窗口,如图。文档窗口一般都有相 应的可见边框,它的客户区是由相应的视图来构成的,因此可以说视图是文 档窗口内的子窗口。文档窗口时刻跟踪当前处于活动状态的视图的变化,并 将用户或系统产生的命令消息传递给当前活动视图。而主窗口负责管理各个 用户交互对象并根据用户操作相应地创建或更新文档窗口及其视图。 图7.1 MDI应用程序的框架窗口 文档窗口 主窗口
71框架窗口 7.1.2窗口风格的设置 窗口风格 窗口风格通常有一般和扩展两种形式。这两种形式的窗口风格可在函数 CWnd: Create或CWnd: CreateEx参数中指定, CreateEx函数可同时支持以 上两种风格,而CWnd: Create只能指定窗口的一般风格。需要说明的是, 对于控件和对话框这样的窗口来说,它们的窗口风格可直接通过其属性对话 框来设置。 需要说明的是,除了上述风格外,框架窗口还有以下三个自己的风格。它们 都可以在 Precreate Window重载函数中指定 FWS ADDTOTITLE 该风格指定相关的信息如文档名添加到框架窗口标题的后面。 FWS PREFIXTITLE 该风格使得框架窗口标题中的文档名显示在应用程序名之前。 FWS SNAPTOBARS 该风格用来调整窗口的大小,使它刚好包含了框架窗口中的控制栏
7.1框架窗口 7.1.2窗口风格的设置 ➢ 窗口风格 窗口风格通常有一般和扩展两种形式。这两种形式的窗口风格可在函数 CWnd::Create或CWnd::CreateEx参数中指定,CreateEx函数可同时支持以 上两种风格,而CWnd::Create只能指定窗口的一般风格。需要说明的是, 对于控件和对话框这样的窗口来说,它们的窗口风格可直接通过其属性对话 框来设置。 需要说明的是,除了上述风格外,框架窗口还有以下三个自己的风格。它们 都可以在PreCreateWindow重载函数中指定。 ◆ FWS_ADDTOTITLE 该风格指定相关的信息如文档名添加到框架窗口标题的后面。 ◆ FWS_PREFIXTITLE 该风格使得框架窗口标题中的文档名显示在应用程序名之前。 ◆ FWS_SNAPTOBARS 该风格用来调整窗口的大小,使它刚好包含了框架窗口中的控制栏
71框架窗口 >用 MFC AppWizard设置 Document Template String r Use split window Main frame styles F Thick frame F System menu F Minimize box 厂 Minimized F Maximize box Maximized F Thick frame F Maximize box Close 图72 MFC AppWizard的窗口风格设置 表72“ Advanced@ptns”对话框窗口风格的各项含义 选顷 含义 Use split window 选中时,将程序的文档窗口创建成“切分”窗口 Thick frame 选中时,设置窗口风格 WS THICKFRAME 选中时,设置窗口风格 WS MINIMIZEBOX 选中时,设置窗口风格 WS MAXIMIZEBOX System menu 选中时,设置窗口风格 WS SYSMENU Minimized 选中时,设置窗口风格 WS MINIMIZ Maximized 选中时,设置窗口风格 WS MAXIMIZ
7.1框架窗口 ➢ 用MFC AppWizard设置 图7.2 MFC AppWizard的窗口风格设置
71框架窗口 修改 CREATESTRUCT结构 窗口创建之前,系统自动调用 PrecreateWindow虚函数。在用 MFC AppWizard创建 SDI/MDI应用程序结构时,MFC已为主窗口或文档窗口类自动重载了该虚函数。可以 在此函数中通过修改 CREATESTRUCT结构来设置窗口的绝大多数风格 例如,在SD程序中,框架窗口默认的风格是WS_ OVERLAPPEDWINDOW和 FWS ADDTOTITLE的组合,更改风格代码 BOOL CMainFrame: PreCreateWindow(CREATESTRUCT& CS) {∥新窗口不带有[最大化]按钮 cs style & NWS_MAXIMIZEBOX ∥/将窗口的大小设为1/3屏幕并居中 y=: GetSystem Metrics(SM_CYSCREEN)/ CS. CX=: GetSystemMetrics(SM_CXSCREEN)/ Cs.y=((CS. cy *3)-CScy)/2 CS.X=((CS. CX*3)-CS CX)/2 ∥/调用基类的 PrecreateWindow函数 return CFrameWnd: PreCreateWindow(cs) 对于MD程序,文档窗口的风格可用下列的代码更改 BOOL CChildFrame: PreCreateWindow(CREATESTRUCT& cs) {∥/创建不含有[最大化]按钮的子窗口 csstyle & NWS MAXIMIZEBOX ∥/调用基类的 PreCreate Window函数 return CMDIChildWnd: PreCreateWindow(cs)i
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); }