CFrameWnd

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

CFrameWnd类成员

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

构造函数
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调整框架窗口中的边框空白

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