【MFC】CFrameWnd类详解

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
MFC目录及头文件 描述 头文件 CAnimateCtrl 自动化通用控件 afxcmn.h CArchive afx.h CArchiveException afx.h CArray afxtempl.h CAsyncMonikerFile 在ActiveX控件中提供对异步标记的支持 afxole.h CAsyncScoket 封装Windows Sockets API,参看CSocket afxsock.h CBitmap afxwin.h CBitmapButton afxext.h CBrush afxwin.h CButton 按钮控件对象 afxwin.h CByteArray afxcoll.h CCachedDataPathProperty 允许一个ActiveX控件异步传输属性数据和缓冲内存中的数据,参考CDataPathProperty afxctl.h CCheckListBox afxwin.h CClientDC afxwin.h CCmdTarget 所有能够接收和响应消息的对象的基 afxwin.h CCmdUI afxwin.h CColorDialog 颜色选择的通用对话框,提供为显示系统定义的颜色列表 afxdlgs.h CComboBox 组合框对象 afxwin.h CComboBoxEx CComboBox的派生,用于支持在组合框控件中的图像列表 afxcmn.h CCommandLineInfo afxwin.h CCommonDialog afxdlgs.h CConnectionPoint afxdisp.h CControlBar afxext.h CCreateContext afxext.h CCriticalSection afxmt.h CCtrlView afxwin.h CDaoDatabase afxdao.h CDaoException afxdao.h CDaoFieldExchange afxdao.h CDaoQueryDef afxdao.h CDaoRecordset 代表选自数据源的记录集。CDaoRecordset对象可用于三种格式:表型记录集,动态集型记录集和快照型记录集 afxdao.h CDaoRecordView 提供表单视图,以在控件中显示数据库记录。表单视图是CDaoRecordset对象的一部分。参考CFormView和CRecordView afxdao.h CDaoTableDef afxdao.h CDaoWorkspace afxdao.h CDatabase afxdb.h CDataExchange afxwin.h CDataPathProperty 实现一个ActiveX控件属性,它能够异步加载其数据。这个允许ActiveX控件在后台下载属性数据时被激活 afxctl.h CDateTimeCtrl 封装新的日期/时间选取器控件 afxdtctl.h CDBException afxdb.h CDBVariant afxdb.h CDC afxwin.h CDialog 用于包含控件窗口的对话框对象 afxwin.h CDialogBar afxext.h CDocItem afxole.h CDockState afxadv.h CDocObjectServer afxdocob.h CDocObjectServerItem afxdocob.h CDocTemplate afxwin.h CDocument 用于管理程序的数据的 afxwin.h CDragListBox Windows列表框,允许用户把其中的项拖放到不同的位置 afxcmn.h CDumpContext afx.h CDWordArray afxcoll.h CEdit 用于文本输入的子窗口控件 afxwin.h CEditView 提供Windows编缉控件的功能。因为CEditView派生于Cedit,该对象可同文件和文件模板一同使用 afxext.h CEvent afxmt.h CException afx.h CFieldExchange afxdb.h CFile afx.h CFileDialog 通用文件对话框,提供Open和Save As对话框中的功能 afxdlgs.h CFileException afx.h CFileFind afx.h CFindReplaceDialog afxdlgs.h CFont afxwin.h CFontDialog 通用字体对话框,用于显示当前已装入系统的字体列表 afxdlgs.h CFontHolder afxctl.h CFormView 包含对话框控件的窗口 afxext.h CFrameWnd SDI(单窗口界面)框架窗口 afxwin.h CFtpConnection afxinet.h CFtpFileFind afxinet.h CGdiObject afxwin.h CGopherConnection afxinet.h CGopherFile afxinet.h CGopherFileFind afxinet.h CGopherLocator afxinet.h CHeaderCtrl 标题通用控件 afxcmn.h CHotKeyCtrl 热键通用控件 afxcmn.h CHtmlStream afxisapi.h CHtmlView 实现Web Browser控件的视图,能够访问当地或Web上的HTML文件。 afxhtml.h CHttpConnection afxinet.h CHttpFile afxinet.h CHttpFilter 创建并处理超文传输协议过滤器对象,该对象用于过滤用于HTTP请求的服务器通知 afxisapi.h CHttpFilterContext afxisapi.h CHttpServer Internet Server API(ISAPI)的包装 afxisapi.h CHttpServerContext afxisapi.h CImageList afxcmn.h CInternetConnection afxinet.h CInternetException afxinet.h CInternetFile afxinet.h CInternetSession afxinet.h CIPAddressCtrl IP地址控件。似于编缉框,该控件接收Internet 协议格式的地址 afxcmn.h CList afxtempl.h CListBox 列表框对象 afxwin.h CListCtrl 列表视通用控件 afxcmn.h ClistView 简化CListCtrl的使用,添加了对文件和视图的支持 afxcview.h CLongBinary afxdb_.h CMap afxtempl.h CMapPtrToPtr afxcoll.h CMapPtrToWord afxcoll.h CMapStringToOb afxcoll.h CMapStringToPtr afxcoll.h CMapStringToString afxcoll.h CMapWordToOb afxcoll.h CMapWordToPtr afxcoll.h CMDIChildWnd MDI(多文档界面)子框架窗口 afxwin.h CMDIFrameWnd afxwin.h CMemFile afx.h CMemoryException afx.h CMemoryState CMenu afxwin.h CMetaFileDC afxext.h CMiniFrameWnd 半高的框架窗口,主要用于浮动工具栏。一个小框架窗口没有最小化和最大化按钮,但其他都似于正常的框架窗口 afxwin.h CMonikerFile afxole.h CMonthCalCtrl 月历控件,用于显示一个用户可选择日期的日历 afxdtctl.h CMultiDocTemplate afxwin.h CMultiLock afxmt.h CMutex afxmt.h CNotSupportedException afx.h CObArray afxcoll.h CObject afx.h CObList afxcoll.h COleBusyDialog afxodlgs.h COleChangeIconDialog afxodlgs.h COleChangeSourceDialog afxodlgs.h COleClientItem afxole.h COleCmdUI afxdocob.h COleControl afxctl.h COleControlModule afxctl.h COleConvertDialog afxodlgs.h COleCurrency afxdisp.h COleDataObject afxole.h COleDataSource afxole.h COleDateTime afxdisp.h COleDateTimeSpan afxdisp.h COleDBRecordView afxoledb.h COleDialog afxodlgs.h COleDispatchDriver afxdisp.h COleDispatchException afxdisp.h COleDocObjectItem afxole.h COleDocument 把一个文件看作为CDocItem对象的一个集合。包容器和服务器都需要这个结构,因为它们的文件必须能够包含OLE项 afxole.h COleDropSource afxole.h COleDropTarget afxole.h COleException afxdisp.h COleInsertDialog afxodlgs.h COleIPFrameWnd afxole.h COleLinkingDoc OLE包容器文件的基,这些文件支持对它们所包含项的链接 afxole.h COleLinksDialog afxodlgs.h COleMessageFilter afxole.h COleObjectFactory afxdisp.h COlePasteSpecialDialog afxodlgs.h COlePropertiesDialog afxodlgs.h COlePropertyPage afxctl.h COleResizeBar afxole.h COleSafeArray afxdisp.h COleServerDoc OLE服务器文件的基 afxole.h COleServerItem 为OLE项提供一个服务器界面 afxole.h COleStreamFile afxole.h COleTemplateServer afxdisp.h COleUpdateDialog afxodlgs.h COleVariant afxdisp.h CPageSetupDialog afxdlgs.h CPaintDC afxwin.h CPalette afxwin.h CPen afxwin.h CPictureHolder afxctl.h CPoint atltypes.h CPrintDialog 通用打印对话框,提供Print和Print Setup对话框中的功能 afxdlgs.h CPrintInfo CProgressCtrl 通用进程指示器控件 afxcmn.h CPropertyPage 代表属性表单中的一页 afxdlgs.h CPropertyPageEx CPropertySheet 属性表,也叫做多选项卡对话框。一个属性表由一个CPropertySheet对象和几个CPropertyPage对象组成 afxdlgs.h CPropertySheetEx CPropExchange afxctl.h CPtrArray afxcoll.h CPtrList afxcoll.h CReBar afxext.h CReBarCtrl afxcmn.h CRecentFileList afxadv.h CRecordset 用于访问数据库表或查询的 afxdb.h CRecordView 包含对话框控件的窗口 afxdb.h CRect atltypes.h CRectTracker afxext.h CResourceException afxwin.h CRgn afxwin.h CRichEditCntrItem afxrich.h CRichEditCtrl 用户能够输入和编缉文本的窗口,提供字符和程序段格式,以及对嵌入OLE项的支持 afxcmn.h CRichEditDoc afxrich.h CRichEditView afxrich.h CRuntimeClass CScrollBar 滚动条对象 afxwin.h CScrollView 可滚动的窗口,派生于CView afxwin.h CSemaphore afxmt.h CSharedFile afxadv.h CSingleDocTemplate afxwin.h CSingleLock afxmt.h CSize atltypes.h CSliderCtrl 提供包含一个滑块和可选的刻度线的窗口 afxcmn.h CSocket Windows Socket API的包装 afxsock.h CSocketFile afxsock.h CSpinButtonCtrl 提供箭头按钮,用户可单击它,以增加或减少某个控件中的一个值 afxcmn.h CSplitterWnd afxext.h CStatic 用于标识另一个控件或给用户提供消息的简单文本框 afxwin.h CStatusBar afxext.h CStatusBarCtrl 提供一个层次窗口,通常放于父窗口的底部,用于显示关于应用程序的状态信息 afxcmn.h CStdioFile afx.h CString afx.h CStringArray afxcoll.h CStringList afxcoll.h CSyncObject afxmt.h CTabCtrl 允许应用程序在一个窗口或对话框的同一区域显示多个页面 afxcmn.h CTime afx.h CTimeSpan afx.h CToolBar afxext.h CToolBarCtrl 工具栏通用控件 afxcmn.h CToolTipCtrl 提供工具提示控件的功能,它以一个小弹出窗口的样子显示,包含描述某个工具用途的一行文本 afxcmn.h CTreeCtrl 显示项的分层结构列表 afxcmn.h CTreeView 简化CTreeCtrl的用法 afxcview.h CTypedPtrArray afxtempl.h CTypedPtrList afxtempl.h CTypedPtrMap afxtempl.h CUIntArray afxcoll.h CUserException afxwin.h CView 用于显示程序数据的 afxwin.h CWaitCursor afxwin.h CWinApp afxwin.h CWindowDC afxwin.h CWinThread 代表一个应用程序中的一个线程 afxwin.h CWnd afxwin.h CWordArray afxcoll.h ......
MFC 中,主界面通常是由一个框架窗口(Frame Window)和多个视图(View)组成。框架窗口负责显示菜单栏、工具栏、状态栏等用户界面元素,而视图则用于显示和操作应用程序所处理的数据。 要将主界面与视图关联起来,可以通过使用 MFC 框架提供的向导(Class Wizard)来实现。具体步骤如下: 1. 在 MFC 应用程序项目中,创建一个新的视图(例如 CMyView),并将其基设置为 CView。 2. 在框架窗口(例如 CMainFrame)中添加一个成员变量,型为 CMyView 的指针,用于存储指向该视图对象的指针。这个成员变量一般命名为 m_pView。 3. 在框架窗口的 OnCreate 函数中,使用 CreateView 函数创建视图对象,并将该对象的指针存储到成员变量中。具体代码如下: ``` int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // ... // 创建视图对象 if (!CreateView()) { TRACE0("Failed to create view\n"); return -1; } // ... return 0; } BOOL CMainFrame::CreateView() { // 获取客户区矩形 CRect rect; GetClientRect(&rect); // 创建视图对象 m_pView = new CMyView(); if (!m_pView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, rect, this, AFX_IDW_PANE_FIRST, NULL)) { delete m_pView; m_pView = NULL; return FALSE; } // 设置视图对象的字体 m_pView->SetFont(&m_font); // 设置视图对象为当前视图 SetActiveView(m_pView, FALSE); return TRUE; } ``` 其中 AFX_IDW_PANE_FIRST 是视图窗口的 ID,可以在资源文件中设置。 4. 在框架窗口的 OnInitialUpdate 函数中,调用视图对象的 OnInitialUpdate 函数来完成视图的初始化工作。具体代码如下: ``` void CMainFrame::OnInitialUpdate() { CFrameWnd::OnInitialUpdate(); // ... // 初始化视图对象 if (m_pView != NULL) { m_pView->OnInitialUpdate(); } // ... // 设置窗口标题 SetWindowText(_T("My Application")); } ``` 这样就可以将主界面与视图关联起来,并在主界面中显示该视图对象。通过框架窗口的成员变量可以访问该视图对象,从而进行数据的操作和显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值