【MFC】CFrameWnd类详解
发布日期:2021-06-29 20:50:19 浏览次数:2 分类:技术文章

本文共 3152 字,大约阅读时间需要 10 分钟。

00. 目录

文章目录

01. 概述

CFrameWnd类提供Windows单文档界面重叠或弹出式框架窗口,以及管理窗口的成员。

CObject  └CCmdTarget     └CWnd        └CFrameWnd

要为应用构造有用的框架窗口,可从CFrameWnd中派生类。向派生类加入成员变量,以便存储指定给应用的数据。在派生类中实现消息处理成员函数和消息映射,指定当消息指向窗口时的动作。

  • 用Create直接构造。
  • 用LoadFrame直接构造。
  • 用文档模板间接构造。

当调用Create和LoadFrame时,必须在堆中构造一个框架窗口(使用C++ New操作)。调用Create之前,也可以用AfxRegisteerWndClass全局函数登记一个窗口类来设置框架的图表和类风格。

使用Create成员函数传递框架构造参数作为立即参数。

LoadFrame需要比Create少的参数,而从资源中获取大多数缺省值,例如框架标题,图标、加速表、菜单。为了能被LoadFrame访问,所有的资源必须有相同的ID(例如,IDR_MAINFRAME)。

当一个CFrameWnd对象包含视图和文档时,它们由框架间接构造而不是直接由程序员直接构造。CDocTemplate对象将框架构造、包含视图的构造、视图与文档相连接等混在一起。CDocTemplate构造函数的参数指定了三种类(文档、框架、视图)的CRuntimeClass。当用户指定新框架时(例如,使用File New命令或MDI Windows New 命令),CRuntimeclass对象被框架用于动态建立新的框架。

一个从CFrameWnd中派生出的框架窗口类必须由DECLARE_DYNCREATE声明以使上面的RUNTIME_CLASS机制正确运行。

CFrameWnd包含缺省实现,用来执行Windows典型应用的主窗口的以下功能:

  • 一个CFrameWnd框架窗口追踪一个与Windows活动窗口无关的窗口或当前输入焦点。当框架再次被激活时,活动视图通过CView::OnActivateView得到通知。
  • 命令消息和一些常用框架通知消息由一个CFrameWnd框架发送到当前活动视图,包括CWnd中由OnSetFocus,OnHScroll,OnVScroll管理的消息。
  • 当前活动窗口(或在MDI框架中当前活动的MDI子框架窗口)可以判断框架窗口的标题,这种特征可以由关闭框架窗口的FMS_ADDTOTITLE风格位使之无效。
  • CFrameWnd框架窗口管理控件条、视图、框架窗口用户区的其它子窗口的位置。一个框架窗口也更新工具条和其它控件条按钮。CFrameWnd框架窗口也有缺省命令功能来打开和关闭工具条和状态条。
  • CFrameWnd框架窗口管理主菜单条。当一个弹出式菜单条显示时,框架
    窗口使用UPDATE_COMMAND_UI机制来决定哪一菜单项目可用、无效、复选。当用户选择了菜单项目时,框架窗口用那个命令的消息字符串更新状态条。
  • CFrameWnd框架窗口有可选的加速器表格来自动译出键盘加速器。
  • CFrameWnd框架窗口有一个与LoadFrame一起设置的可选帮助ID,用于上下文敏感帮助。一个框架窗口是一个象上下文敏感帮助(SHIFT+F1)和打印预览模式那样的半模态的乐队。
  • CFrameWnd框架窗口可以打开一个从文件管理器拖出的文件并放置在框架窗口上。如果一个文件扩展名被登记并与应用有关,框架窗口应对动态数据交换(DDE)开放请求作出应答,此请求在用户从文件管理器中打开一个文件或调用ShellExecute函数时发生。
  • 如果框架窗口是应用的主窗口(即CWinThread::m_pMainWnd),当用户关闭应用时,框架窗口让用户存储改变过的文档(用OnClose和OnQueryEndSession)。
  • 如果框架窗口是应用的主窗口,框架窗口是运行WinHelp的上下文。关闭框架窗口时,如果它是为应用提供帮助,则会关闭WINHELP.EXE。

不要使用C++ delete操作析构一个框架窗口,而应该用CWnd::DestroyWindow。CFrameWnd实现的PostNcDestroy会在窗体被析构时删除C++对象。当用户关闭框架窗口时,缺省OnClose处理会调用DestroyWindow。

要了解有关CFrameWnd的更多信息,可参阅联机文档“Visual C++程序员指南”中的“框架窗口主题”。

#include 
参阅:CWnd, CMDIFrameWnd, CMIDChildWnd, CView, CDocTemplate, CRuntimeClass

02. 数据成员

数据成员     m_bAutoMenuEnable 自动控制使菜单项目可用或无效  rectDefault 当构造一个CFrameWnd对象时传递此静态CRect作为参数,使Windows选择窗体的初始大小和位置

03. 成员方法

构造函数 CFrameWnd 构造一个CFrameWnd对象  初始化 Create 调用以构造和初始化一个与CFrameWnd对象有关的Windows框架窗口  LoadFrame 调用以从资源信息中动态构造一个框架窗口  LoadAccelTable 装入一个加速器表格  LoadBarState 复位控件条设置  SaveBarState 存储控件条设置  ShowControlBar 显示控件条  SetDockState 在主窗口中停靠框架窗口  GetDockState 获取框架窗口的停靠状态  操作 ActivateFrame 使框架对用户可视并可用  InitialUpdateFrame在 调用的框架窗中使OnInitialUpdate成员函数属于所有视图  GetActiveFrame 返回活动CFrameWnd对象  SetActiveView 设置活动CView对象  GetActiveView 返回活动CView对象  CreateView 在框架中构造一个非CView派生的视图  GetActiveDocument 返回活动CDowment对象  GetControlBar 返回控件条  GetMessageString 获得与命令ID相符的消息  IsTracking 确定分隔条是否正在移动  SetMessageText 设置标准状态条的文本  EnableDocking 允许一个控件条停靠  DockControlBar 停靠一个控件条  FloatControlBar 浮动一个控件条  BeginModalState 将框架窗口设置为模态  EndModalState 结束框架窗口的模态状态,用BeginModalState使无效的窗口可用  InModalState 返回一个表明框架窗口是否处于模态状态  ShowOwnedWindows 显示所有CFrameWnd对象的后代窗口  RecalcLayout 重新设置CFrameWnd对象的控件条的位置  可重载函数 OnCreateClient 为框架构造一个用户窗口  OnSetPreviewMode 设置应用的主框架成为或退出预打印模式  GetMessageBar 返回一个属于框架窗口的状态条指针  NegotiateBorderSpace 调整框架窗口中的边框空白

04. 命令处理

命令处理     OnContextHelp 处理相应项的SHIFT+F1帮助

05. 附录

5.1 官方参考文档

网址:

转载地址:https://dengjin.blog.csdn.net/article/details/113407852 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【MFC】Windows窗口样式
下一篇:【MFC】CWinApp类详解

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月22日 07时17分41秒