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 <afxwin.h>
参阅:
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://docs.microsoft.com/zh-cn/cpp/mfc/reference/cframewnd-class?view=msvc-160