【MFC】CFrameWnd类详解
00. 目錄
文章目錄
- 00. 目錄
- 01. 概述
- 02. 數(shù)據(jù)成員
- 03. 成員方法
- 04. 命令處理
- 05. 附錄
01. 概述
CFrameWnd類(lèi)提供Windows單文檔界面重疊或彈出式框架窗口,以及管理窗口的成員。
CObject └CCmdTarget └CWnd └CFrameWnd要為應(yīng)用構(gòu)造有用的框架窗口,可從CFrameWnd中派生類(lèi)。向派生類(lèi)加入成員變量,以便存儲(chǔ)指定給應(yīng)用的數(shù)據(jù)。在派生類(lèi)中實(shí)現(xiàn)消息處理成員函數(shù)和消息映射,指定當(dāng)消息指向窗口時(shí)的動(dòng)作。
- 用Create直接構(gòu)造。
- 用LoadFrame直接構(gòu)造。
- 用文檔模板間接構(gòu)造。
當(dāng)調(diào)用Create和LoadFrame時(shí),必須在堆中構(gòu)造一個(gè)框架窗口(使用C++ New操作)。調(diào)用Create之前,也可以用AfxRegisteerWndClass全局函數(shù)登記一個(gè)窗口類(lèi)來(lái)設(shè)置框架的圖表和類(lèi)風(fēng)格。
使用Create成員函數(shù)傳遞框架構(gòu)造參數(shù)作為立即參數(shù)。
LoadFrame需要比Create少的參數(shù),而從資源中獲取大多數(shù)缺省值,例如框架標(biāo)題,圖標(biāo)、加速表、菜單。為了能被LoadFrame訪問(wèn),所有的資源必須有相同的ID(例如,IDR_MAINFRAME)。
當(dāng)一個(gè)CFrameWnd對(duì)象包含視圖和文檔時(shí),它們由框架間接構(gòu)造而不是直接由程序員直接構(gòu)造。CDocTemplate對(duì)象將框架構(gòu)造、包含視圖的構(gòu)造、視圖與文檔相連接等混在一起。CDocTemplate構(gòu)造函數(shù)的參數(shù)指定了三種類(lèi)(文檔、框架、視圖)的CRuntimeClass。當(dāng)用戶指定新框架時(shí)(例如,使用File New命令或MDI Windows New 命令),CRuntimeclass對(duì)象被框架用于動(dòng)態(tài)建立新的框架。
一個(gè)從CFrameWnd中派生出的框架窗口類(lèi)必須由DECLARE_DYNCREATE聲明以使上面的RUNTIME_CLASS機(jī)制正確運(yùn)行。
CFrameWnd包含缺省實(shí)現(xiàn),用來(lái)執(zhí)行Windows典型應(yīng)用的主窗口的以下功能:
- 一個(gè)CFrameWnd框架窗口追蹤一個(gè)與Windows活動(dòng)窗口無(wú)關(guān)的窗口或當(dāng)前輸入焦點(diǎn)。當(dāng)框架再次被激活時(shí),活動(dòng)視圖通過(guò)CView::OnActivateView得到通知。
- 命令消息和一些常用框架通知消息由一個(gè)CFrameWnd框架發(fā)送到當(dāng)前活動(dòng)視圖,包括CWnd中由OnSetFocus,OnHScroll,OnVScroll管理的消息。
- 當(dāng)前活動(dòng)窗口(或在MDI框架中當(dāng)前活動(dòng)的MDI子框架窗口)可以判斷框架窗口的標(biāo)題,這種特征可以由關(guān)閉框架窗口的FMS_ADDTOTITLE風(fēng)格位使之無(wú)效。
- CFrameWnd框架窗口管理控件條、視圖、框架窗口用戶區(qū)的其它子窗口的位置。一個(gè)框架窗口也更新工具條和其它控件條按鈕。CFrameWnd框架窗口也有缺省命令功能來(lái)打開(kāi)和關(guān)閉工具條和狀態(tài)條。
- CFrameWnd框架窗口管理主菜單條。當(dāng)一個(gè)彈出式菜單條顯示時(shí),框架
窗口使用UPDATE_COMMAND_UI機(jī)制來(lái)決定哪一菜單項(xiàng)目可用、無(wú)效、復(fù)選。當(dāng)用戶選擇了菜單項(xiàng)目時(shí),框架窗口用那個(gè)命令的消息字符串更新?tīng)顟B(tài)條。 - CFrameWnd框架窗口有可選的加速器表格來(lái)自動(dòng)譯出鍵盤(pán)加速器。
- CFrameWnd框架窗口有一個(gè)與LoadFrame一起設(shè)置的可選幫助ID,用于上下文敏感幫助。一個(gè)框架窗口是一個(gè)象上下文敏感幫助(SHIFT+F1)和打印預(yù)覽模式那樣的半模態(tài)的樂(lè)隊(duì)。
- CFrameWnd框架窗口可以打開(kāi)一個(gè)從文件管理器拖出的文件并放置在框架窗口上。如果一個(gè)文件擴(kuò)展名被登記并與應(yīng)用有關(guān),框架窗口應(yīng)對(duì)動(dòng)態(tài)數(shù)據(jù)交換(DDE)開(kāi)放請(qǐng)求作出應(yīng)答,此請(qǐng)求在用戶從文件管理器中打開(kāi)一個(gè)文件或調(diào)用ShellExecute函數(shù)時(shí)發(fā)生。
- 如果框架窗口是應(yīng)用的主窗口(即CWinThread::m_pMainWnd),當(dāng)用戶關(guān)閉應(yīng)用時(shí),框架窗口讓用戶存儲(chǔ)改變過(guò)的文檔(用OnClose和OnQueryEndSession)。
- 如果框架窗口是應(yīng)用的主窗口,框架窗口是運(yùn)行WinHelp的上下文。關(guān)閉框架窗口時(shí),如果它是為應(yīng)用提供幫助,則會(huì)關(guān)閉WINHELP.EXE。
不要使用C++ delete操作析構(gòu)一個(gè)框架窗口,而應(yīng)該用CWnd::DestroyWindow。CFrameWnd實(shí)現(xiàn)的PostNcDestroy會(huì)在窗體被析構(gòu)時(shí)刪除C++對(duì)象。當(dāng)用戶關(guān)閉框架窗口時(shí),缺省OnClose處理會(huì)調(diào)用DestroyWindow。
要了解有關(guān)CFrameWnd的更多信息,可參閱聯(lián)機(jī)文檔“Visual C++程序員指南”中的“框架窗口主題”。
#include <afxwin.h> 參閱: CWnd, CMDIFrameWnd, CMIDChildWnd, CView, CDocTemplate, CRuntimeClass02. 數(shù)據(jù)成員
數(shù)據(jù)成員 m_bAutoMenuEnable 自動(dòng)控制使菜單項(xiàng)目可用或無(wú)效 rectDefault 當(dāng)構(gòu)造一個(gè)CFrameWnd對(duì)象時(shí)傳遞此靜態(tài)CRect作為參數(shù),使Windows選擇窗體的初始大小和位置03. 成員方法
構(gòu)造函數(shù) CFrameWnd 構(gòu)造一個(gè)CFrameWnd對(duì)象 初始化 Create 調(diào)用以構(gòu)造和初始化一個(gè)與CFrameWnd對(duì)象有關(guān)的Windows框架窗口 LoadFrame 調(diào)用以從資源信息中動(dòng)態(tài)構(gòu)造一個(gè)框架窗口 LoadAccelTable 裝入一個(gè)加速器表格 LoadBarState 復(fù)位控件條設(shè)置 SaveBarState 存儲(chǔ)控件條設(shè)置 ShowControlBar 顯示控件條 SetDockState 在主窗口中??靠蚣艽翱? GetDockState 獲取框架窗口的??繝顟B(tài) 操作 ActivateFrame 使框架對(duì)用戶可視并可用 InitialUpdateFrame在 調(diào)用的框架窗中使OnInitialUpdate成員函數(shù)屬于所有視圖 GetActiveFrame 返回活動(dòng)CFrameWnd對(duì)象 SetActiveView 設(shè)置活動(dòng)CView對(duì)象 GetActiveView 返回活動(dòng)CView對(duì)象 CreateView 在框架中構(gòu)造一個(gè)非CView派生的視圖 GetActiveDocument 返回活動(dòng)CDowment對(duì)象 GetControlBar 返回控件條 GetMessageString 獲得與命令I(lǐng)D相符的消息 IsTracking 確定分隔條是否正在移動(dòng) SetMessageText 設(shè)置標(biāo)準(zhǔn)狀態(tài)條的文本 EnableDocking 允許一個(gè)控件條??? DockControlBar 停靠一個(gè)控件條 FloatControlBar 浮動(dòng)一個(gè)控件條 BeginModalState 將框架窗口設(shè)置為模態(tài) EndModalState 結(jié)束框架窗口的模態(tài)狀態(tài),用BeginModalState使無(wú)效的窗口可用 InModalState 返回一個(gè)表明框架窗口是否處于模態(tài)狀態(tài) ShowOwnedWindows 顯示所有CFrameWnd對(duì)象的后代窗口 RecalcLayout 重新設(shè)置CFrameWnd對(duì)象的控件條的位置 可重載函數(shù) OnCreateClient 為框架構(gòu)造一個(gè)用戶窗口 OnSetPreviewMode 設(shè)置應(yīng)用的主框架成為或退出預(yù)打印模式 GetMessageBar 返回一個(gè)屬于框架窗口的狀態(tài)條指針 NegotiateBorderSpace 調(diào)整框架窗口中的邊框空白04. 命令處理
命令處理 OnContextHelp 處理相應(yīng)項(xiàng)的SHIFT+F1幫助05. 附錄
5.1 官方參考文檔
網(wǎng)址:https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cframewnd-class?view=msvc-160
總結(jié)
以上是生活随笔為你收集整理的【MFC】CFrameWnd类详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【MFC】CWinApp类详解
- 下一篇: 【MFC】Windows窗口样式