CFrameWnd
類別
提供 Windows 單一文件介面 (SDI) 重疊或快顯框架視窗的功能,以及管理視窗的成員。
語法
class CFrameWnd : public CWnd
成員
公用建構函式
名稱 | 描述 |
---|---|
CFrameWnd::CFrameWnd |
建構 CFrameWnd 物件。 |
公用方法
受保護的方法
名稱 | 描述 |
---|---|
CFrameWnd::OnCreateClient |
建立框架的客戶端視窗。 |
CFrameWnd::OnHideMenuBar |
在隱藏目前 MFC 應用程式中的功能表之前呼叫。 |
CFrameWnd::OnShowMenuBar |
在顯示目前 MFC 應用程式中的功能表之前呼叫。 |
公用資料成員
名稱 | 描述 |
---|---|
CFrameWnd::m_bAutoMenuEnable |
控制功能表項的自動啟用和停用功能。 |
CFrameWnd::rectDefault |
建立 CFrameWnd 物件時,將此靜態CRect 傳遞為參數,以允許 Windows 選擇視窗的初始大小和位置。 |
備註
若要為您的應用程式建立有用的框架視窗,請從 CFrameWnd
衍生類別。 將成員變數新增至衍生類別,以儲存應用程式特定的數據。 實作訊息處理常式成員函式,和衍生類別中對應的訊息,以指定訊息被導向至視窗時會發生什麼事。
建構框架視窗的方式有三種:
在呼叫 Create
或 LoadFrame
之前,您必須使用 C++ new
運算子,在堆積上建構框架窗口物件。 呼叫 Create
之前,您也可以向 AfxRegisterWndClass
全域函式註冊窗口類別,以設定框架的圖示和類別樣式。
Create
使用成員函式,將框架的建立參數當做立即自變數傳遞。
LoadFrame
自變數比 Create
少,而是從資源擷取大部分的預設值,包括框架的標題、圖示、快捷鍵數據表和功能表。 若要可供 存取 LoadFrame
,所有這些資源都必須具有相同的資源識別碼(例如 , IDR_MAINFRAME
。
CFrameWnd
當物件包含檢視和檔時,架構會間接建立它們,而不是由程式設計人員直接建立。 物件 CDocTemplate
會協調框架的建立、建立包含的檢視,以及檢視與適當文件的連接。 建構函式的參數 CDocTemplate
會指定 CRuntimeClass
涉及的三個類別 (檔案、框架和檢視) 的 。 CRuntimeClass
架構會使用 物件,在使用者指定時動態建立新的框架(例如,使用 [檔案新增] 命令或多個文檔介面 [MDI] 視窗 New 命令)。
衍生自 CFrameWnd
的框架視窗類別必須以 DECLARE_DYNCREATE
宣告,才能讓上述 RUNTIME_CLASS
機制正常運作。
CFrameWnd
包含預設實作,以在適用於 Windows 的一般應用程式中執行主視窗的下列函式:
CFrameWnd
框架窗口會追蹤目前使用中檢視,該檢視與 Windows 使用中視窗或目前的輸入焦點無關。 重新啟用框架時,會呼叫CView::OnActivateView
來通知使用中檢視。命令訊息和許多常見的框架通知訊息,包括 、 和
CWnd
OnVScroll
函式所OnSetFocus
OnHScroll
處理的訊息,是由CFrameWnd
框架視窗委派給目前使用中檢視。目前使用中的檢視(或 MDI 框架的目前作用中 MDI 子框架視窗)可以決定框架視窗的標題。 關閉框架視窗的樣式位,即可停用
FWS_ADDTOTITLE
此功能。CFrameWnd
框架視窗會管理控制列、檢視和其他子視窗在框架視窗工作區內的位置。 框架視窗也會執行工具列和其他控制列按鈕的閑置時間更新。CFrameWnd
框架視窗也有用來切換工具列和狀態列之命令的預設實作。CFrameWnd
框架視窗會管理主功能表列。 顯示快捷功能表時,框架視窗會使用UPDATE_COMMAND_UI
機制來判斷應啟用、停用或核取哪些功能表項。 當使用者選取功能表項時,框架視窗會使用該命令的訊息字串來更新狀態列。CFrameWnd
框架視窗有選擇性的快速鍵表格,可自動翻譯鍵盤快捷方式。CFrameWnd
框架視窗具有選擇性的說明識別碼,LoadFrame
用於內容相關說明。 框架視窗是半模式狀態的主要協調器,例如上下文相關說明 (SHIFT+F1) 和列印預覽模式。CFrameWnd
框架視窗會開啟從 [檔案管理員] 拖曳的檔案,並放在框架視窗上。 如果註冊了擴展名並與應用程式相關聯,框架視窗就會響應動態數據交換 (DDE) 開啟要求,該要求會在使用者開啟檔案管理員中的數據檔或呼叫 Windows 函式時ShellExecute
發生。如果框架視窗是主要應用程式視窗(也就是
CWinThread::m_pMainWnd
),當使用者關閉應用程式時,框架視窗會提示使用者儲存任何修改的檔案(針對OnClose
和OnQueryEndSession
)。如果框架視窗是主要應用程式視窗,框架視窗就是執行 WinHelp 的內容。 如果已啟動此應用程式的說明,關閉框架視窗將會關閉
WINHELP.EXE
。
請勿使用 C++ delete
運算符終結框架視窗。 請改用 CWnd::DestroyWindow
。 當窗口終結時,的 CFrameWnd
PostNcDestroy
實作將會刪除C++物件。 當使用者關閉框架視窗時,預設 OnClose
處理程式會呼叫 DestroyWindow
。
如需 的詳細資訊 CFrameWnd
,請參閱 Frame Windows。
繼承階層架構
CFrameWnd
需求
標頭: afxwin.h
CFrameWnd::ActivateFrame
呼叫此成員函式來啟動和還原框架視窗,讓使用者可以看到並可供使用者使用。
virtual void ActivateFrame(int nCmdShow = -1);
參數
nCmdShow
指定要傳遞至 CWnd::ShowWindow
的參數。 根據預設,畫面格會顯示並正確還原。
備註
此成員函式通常會在非使用者介面事件之後呼叫,例如 DDE、OLE 或其他事件,這些事件可能會向用戶顯示框架視窗或其內容。
默認實作會啟動框架,並將其帶到 Z 順序的頂端,並視需要對應用程式的主框架窗口執行相同的步驟。
覆寫此成員函式以變更框架的啟動方式。 例如,您可以強制將 MDI 子視窗最大化。 新增適當的功能,然後使用明確的 nCmdShow
呼叫基類版本。
範例
void CChildFrame::ActivateFrame(int nCmdShow)
{
// Create the child frame window maximized
nCmdShow = SW_MAXIMIZE;
CMDIChildWnd::ActivateFrame(nCmdShow);
}
CFrameWnd::BeginModalState
呼叫此成員函式以製作框架視窗強制回應。
virtual void BeginModalState();
CFrameWnd::CFrameWnd
CFrameWnd
建構 物件,但不會建立可見框架視窗。
CFrameWnd();
備註
呼叫 Create
以建立可見視窗。
CFrameWnd::Create
呼叫 以建立和初始化與 CFrameWnd
對象相關聯的 Windows 框架視窗。
virtual BOOL Create(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle = WS_OVERLAPPEDWINDOW,
const RECT& rect = rectDefault,
CWnd* pParentWnd = NULL,
LPCTSTR lpszMenuName = NULL,
DWORD dwExStyle = 0,
CCreateContext* pContext = NULL);
參數
lpszClassName
指向命名 Windows 類別的 Null 終止字元字串。 類別名稱可以是向 AfxRegisterWndClass
全域函式或 RegisterClass
Windows 函式註冊的任何名稱。 如果 NULL
為 ,則使用預先定義的預設 CFrameWnd
屬性。
lpszWindowName
指向代表視窗名稱的 Null 終止字元字串。 做為標題列的文字。
dwStyle
指定視窗 樣式 屬性。 FWS_ADDTOTITLE
如果您想要讓標題列自動顯示視窗中所代表檔的名稱,請包含樣式。
rect
指定視窗的大小和位置。 值 rectDefault
可讓 Windows 指定新視窗的大小和位置。
pParentWnd
指定這個框架視窗的父視窗。 此參數應該是 NULL
最上層框架視窗。
lpszMenuName
識別要與視窗搭配使用的功能表資源名稱。 如果選單具有整數識別碼,而不是字串,請使用 MAKEINTRESOURCE
。 這個參數可以是 NULL
。
dwExStyle
指定視窗擴充 樣式 屬性。
pContext
指定結構的指標 CCreateContext
。 這個參數可以是 NULL
。
傳回值
如果初始化成功,則為非零;否則為 0。
備註
CFrameWnd
在兩個步驟中建構物件。 首先,叫用建構函式來建構 CFrameWnd
對象,然後呼叫 Create
,這會建立 Windows 框架視窗並將它附加至 CFrameWnd
物件。 Create
初始化視窗的類別名稱和視窗名稱,並註冊其樣式、父系和相關聯功能表的預設值。
使用 LoadFrame
而不是 Create
從資源載入框架視窗,而不是指定其自變數。
CFrameWnd::CreateView
呼叫 CreateView
以在框架內建立檢視。
CWnd* CreateView(
CCreateContext* pContext,
UINT nID = AFX_IDW_PANE_FIRST);
參數
pContext
指定檢視和文件的類型。
nID
檢視的標識碼。
傳回值
如果成功, CWnd
則為物件的指標,否則 NULL
為 。
備註
使用此成員函式來建立不在 CView
框架內衍生的「檢視」。 呼叫 CreateView
之後,您必須手動將檢視設定為使用中,並將其設定為可見;這些工作不會由 CreateView
自動執行。
CFrameWnd::DockControlBar
使控制列停駐在框架視窗。
void DockControlBar(
CControlBar* pBar,
UINT nDockBarID = 0,
LPCRECT lpRect = NULL);
參數
pBar
指向要停駐的控制列。
nDockBarID
決定要考慮停駐之框架視窗的哪一側。 它可以是 0,或下列其中一或多個:
AFX_IDW_DOCKBAR_TOP
停駐在框架視窗的頂端。AFX_IDW_DOCKBAR_BOTTOM
停駐在框架視窗的底部。AFX_IDW_DOCKBAR_LEFT
停駐在框架視窗的左側。AFX_IDW_DOCKBAR_RIGHT
停駐在框架窗口右側。
如果為 0,控制件列可以停駐到在目的地框架視窗中啟用停駐的任何側邊。
lpRect
決定在螢幕座標中,控制列會停駐在目的地框架視窗的非工作區中。
備註
控制列會停駐在和呼叫CControlBar::EnableDocking
CFrameWnd::EnableDocking
中所指定框架視窗的其中一側。 選擇的端是由 nDockBarID
決定。
CFrameWnd::EnableDocking
呼叫此函式,以在框架視窗中啟用可停駐控制列。
void EnableDocking(DWORD dwDockStyle);
參數
dwDockStyle
指定框架視窗的哪一側可作為控制列的停駐位置。 它可以是下列其中一或多個專案:
CBRS_ALIGN_TOP
允許在工作區頂端停駐。CBRS_ALIGN_BOTTOM
允許在工作區底部停駐。CBRS_ALIGN_LEFT
允許在工作區左側停駐。CBRS_ALIGN_RIGHT
允許在工作區右側停駐。CBRS_ALIGN_ANY
允許在工作區的任何一端停駐。
備註
根據預設,控制列會以下列順序停駐到框架視窗的一側:上、下、左、右。
範例
請參閱 CToolBar::Create
的範例。
CFrameWnd::EndModalState
呼叫此成員函式,將框架視窗從強制回應變更為非強制回應。
virtual void EndModalState();
備註
EndModalState
會啟用 由 BeginModalState
停用的所有視窗。
CFrameWnd::FloatControlBar
呼叫此函式,使控制列不會停駐到框架視窗。
void FloatControlBar(
CControlBar* pBar,
CPoint point,
DWORD dwStyle = CBRS_ALIGN_TOP);
參數
pBar
指向要浮動的控制列。
point
位置,在螢幕座標中,控制列左上角的位置將會放置於此位置。
dwStyle
指定在新的框架視窗中水平或垂直對齊控件列。 它可以是下列任一項:
CBRS_ALIGN_TOP
垂直方向控制列。CBRS_ALIGN_BOTTOM
垂直方向控制列。CBRS_ALIGN_LEFT
水準方向控制列。CBRS_ALIGN_RIGHT
水準方向控制列。
如果傳遞樣式以指定水平和垂直方向,工具列會水準方向。
備註
一般而言,這是在應用程式啟動時,當程式從先前執行還原設定時完成。
當使用者在將控件列拖曳到無法停駐的位置時,放開滑鼠左鍵來卸載作業時,架構會呼叫此函式。
CFrameWnd::GetActiveDocument
呼叫這個成員函式,以取得目前附加至目前 CDocument
使用中檢視的指標。
virtual CDocument* GetActiveDocument();
傳回值
目前 CDocument
的指標。 如果沒有目前的檔案,會傳 NULL
回 。
CFrameWnd::GetActiveFrame
呼叫這個成員函式,以取得 MDI 框架視窗使用中多個文檔介面 (MDI) 子視窗的指標。
virtual CFrameWnd* GetActiveFrame();
傳回值
使用中 MDI 子視窗的指標。 如果應用程式是 SDI 應用程式,或 MDI 框架視窗沒有使用中檔,則會傳回隱含 this
指標。
備註
如果沒有使用中的 MDI 子系,或應用程式是單一檔介面 (SDI),則會傳回隱含 this
指標。
CFrameWnd::GetActiveView
呼叫這個成員函式,以取得附加至框架視窗 CFrameWnd
的作用中檢視指標(如果有的話)。
CView* GetActiveView() const;
傳回值
目前 CView
的指標。 如果沒有目前的檢視,則傳 NULL
回 。
備註
呼叫 MDI 主框架視窗 時,此函式會NULL
傳回 。 CMDIFrameWnd
在 MDI 應用程式中,MDI 主框架視窗沒有與其相關聯的檢視。 相反地,每個個別子視窗 ( CMDIChildWnd
) 都有一或多個相關聯的檢視。 您可以先尋找作用中的 MDI 子視窗,然後尋找該子視窗的作用中檢視,以取得 MDI 應用程式中的作用中檢視。 呼叫 函式或GetActiveFrame
如下列所示,即可找到MDIGetActive
使用中的 MDI 子視窗:
CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->GetMainWnd();
// Get the active MDI child window.
CMDIChildWnd *pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
// or CMDIChildWnd *pChild = pFrame->MDIGetActive();
// Get the active view attached to the active MDI child window.
CMyView *pView = (CMyView*)pChild->GetActiveView();
CFrameWnd::GetControlBar
呼叫 GetControlBar
以取得與標識符相關聯之控制列的存取權。
CControlBar* GetControlBar(UINT nID);
參數
nID
控制列的標識碼。
傳回值
與標識符相關聯的控制列指標。
備註
參數 nID
會參考傳遞至 Create
控制列方法的唯一標識符。 如需控制列的詳細資訊,請參閱標題為 控制列的主題。
GetControlBar
會傳回控件列,即使它是浮動的,因此目前不是框架的子視窗。
CFrameWnd::GetDockState
呼叫這個成員函式,以將框架視窗控制檔列的狀態資訊儲存在物件中 CDockState
。
void GetDockState(CDockState& state) const;
參數
state
傳回時,包含框架視窗控制列的目前狀態。
備註
接著,您可以使用 或 將 的內容CDockState
寫入記憶體CDockState::SaveState
。Serialize
如果您稍後想要將控制列還原為先前的狀態,請使用 或Serialize
載入狀態CDockState::LoadState
,然後呼叫 SetDockState
以將先前的狀態套用至框架視窗的控制列。
CFrameWnd::GetMenuBarState
擷取目前MFC應用程式中功能表的顯示狀態。
virtual DWORD GetMenuBarState();
傳回值
傳回值可以有下列值:
AFX_MBS_VISIBLE
(0x01) - 選單可見。AFX_MBS_HIDDEN
(0x02) - 選單已隱藏。
備註
如果發生運行時錯誤,這個方法會在偵錯模式中判斷提示,並引發衍生自 類別的 CException
例外狀況。
CFrameWnd::GetMenuBarVisibility
指出目前 MFC 應用程式中功能表的預設狀態是隱藏還是可見。
virtual DWORD CFrameWnd::GetMenuBarVisibility();
傳回值
此方法會傳回下列其中一個值:
AFX_MBV_KEEPVISIBLE
(0x01) - 功能表會隨時顯示,而且預設沒有焦點。AFX_MBV_DISPLAYONFOCUS
(0x02) - 預設會隱藏功能表。 如果隱藏功能表,請按ALT鍵來顯示功能表,並給予焦點。 如果顯示功能表,請按 ALT 或 ESC 鍵來隱藏它。AFX_MBV_ DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10
(0x06) - 預設會隱藏功能表。 如果功能表已隱藏,請按 F10 鍵來顯示功能表,並給予焦點。 如果顯示功能表,請按 F10 鍵來切換功能表的焦點。 功能表會顯示,直到您按下 ALT 或 ESC 鍵來隱藏它為止。
備註
如果發生運行時錯誤,這個方法會在偵錯模式中判斷提示,並引發衍生自 類別的 CException
例外狀況。
CFrameWnd::GetMessageBar
呼叫這個成員函式以取得狀態列的指標。
virtual CWnd* GetMessageBar();
傳回值
狀態列視窗的指標。
CFrameWnd::GetMessageString
覆寫此函式以提供命令標識碼的自訂字串。
virtual void GetMessageString(
UINT nID,
CString& rMessage) const;
參數
nID
所需訊息的資源標識碼。
rMessage
CString
要放置訊息的目標物件。
備註
默認實作只會從資源檔案載入指定的 nID
字串。 當狀態列中的訊息字串需要更新時,架構會呼叫此函式。
CFrameWnd::GetTitle
擷取視窗對象的標題。
CString GetTitle() const;
傳回值
CString
物件,包含窗口物件的目前標題。
CFrameWnd::InitialUpdateFrame
使用 Create
建立新框架之後呼叫 IntitialUpdateFrame
。
void InitialUpdateFrame(
CDocument* pDoc,
BOOL bMakeVisible);
參數
pDoc
指向框架視窗相關聯的檔。 可以是 NULL
。
bMakeVisible
如果 TRUE
為 ,表示框架應該變成可見且作用中。 如果 FALSE
為 ,則不會顯示任何子系。
備註
這會導致該框架視窗中的所有檢視接收其 OnInitialUpdate
呼叫。
此外,如果先前沒有使用中檢視,則會使用框架視窗的主要檢視。 主要檢視是子標識碼為的 AFX_IDW_PANE_FIRST
檢視。 最後,如果 bMakeVisible
為非零,則會顯示框架視窗。 如果 bMakeVisible
為 0,則框架視窗目前的焦點和可見狀態會保持不變。 使用 Framework 的 File New 和 File Open 實作時,不需要呼叫此函式。
CFrameWnd::InModalState
呼叫此成員函式,以檢查框架視窗是否為強制回應或無模式。
BOOL InModalState() const;
傳回值
如果是則為非零;否則為 0。
CFrameWnd::IsTracking
呼叫這個成員函式,以判斷視窗中的分隔列目前是否正在移動。
BOOL IsTracking() const;
傳回值
如果分割器作業正在進行中,則為非零;否則為 0。
CFrameWnd::LoadAccelTable
呼叫 以載入指定的快捷鍵數據表。
BOOL LoadAccelTable(LPCTSTR lpszResourceName);
參數
lpszResourceName
識別加速器資源的名稱。 如果使用整數識別碼來識別資源,請使用 MAKEINTRESOURCE
。
傳回值
如果已成功載入快捷鍵數據表,則為非零;否則為 0。
備註
一次只能載入一個數據表。
從資源載入的加速器數據表會在應用程式終止時自動釋放。
如果您呼叫 LoadFrame
以建立框架視窗,架構會載入快速鍵數據表以及功能表和圖示資源,然後不需要後續呼叫這個成員函式。
CFrameWnd::LoadBarState
呼叫此函式以還原框架視窗所擁有的每個控制列的設定。
void LoadBarState(LPCTSTR lpszProfileName);
參數
lpszProfileName
初始化 (INI) 檔案中的區段名稱,或儲存狀態資訊之 Windows 登錄中的機碼。
備註
還原的資訊包括可見性、水準/垂直方向、停駐狀態,以及控制列位置。
您要還原的設定必須先寫入登錄,才能呼叫 LoadBarState
。 藉由呼叫 CWinApp::SetRegistryKey
,將資訊寫入登錄。 藉由呼叫 SaveBarState
,將資訊寫入 INI 檔案。
CFrameWnd::LoadFrame
呼叫 以從資源信息動態建立框架視窗。
virtual BOOL LoadFrame(
UINT nIDResource,
DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,
CWnd* pParentWnd = NULL,
CCreateContext* pContext = NULL);
參數
nIDResource
與框架窗口相關聯的共用資源的標識碼。
dwDefaultStyle
框架的 樣式。 FWS_ADDTOTITLE
如果您想要讓標題列自動顯示視窗中所代表檔的名稱,請包含樣式。
pParentWnd
框架父系的指標。
pContext
結構的指標 CCreateContext
。 這個參數可以是 NULL
。
備註
CFrameWnd
在兩個步驟中建構物件。 首先,叫用建構函式來建構 CFrameWnd
對象,然後呼叫 LoadFrame
,它會載入 Windows 框架視窗和相關聯的資源,並將框架視窗附加至 CFrameWnd
物件。 參數 nIDResource
會指定功能表、快速鍵數據表、圖示,以及框架視窗標題的字串資源。
Create
使用成員函式,而不是LoadFrame
當您想要指定所有框架視窗的建立參數時。
架構會在使用檔範本物件建立框架視窗時呼叫 LoadFrame
。
架構會 pContext
使用 自變數來指定要連接到框架窗口的物件,包括任何自主檢視物件。 呼叫 時LoadFrame
,您可以將 自變數設定pContext
為 NULL
。
CFrameWnd::m_bAutoMenuEnable
啟用此數據成員(也就是預設值),當使用者下拉功能表時,不會有 ON_UPDATE_COMMAND_UI
或 ON_COMMAND
處理程式的功能表項會自動停用。
BOOL m_bAutoMenuEnable;
備註
具有 ON_COMMAND
處理程式但不會自動啟用處理程式 ON_UPDATE_COMMAND_UI
的功能表項。
設定此資料成員時,功能表項會自動啟用,方式與啟用工具列按鈕的方式相同。
注意
m_bAutoMenuEnable
對最上層功能表項沒有任何作用。
此數據成員會根據目前的選取專案簡化選擇性命令的實作,並減少撰寫 ON_UPDATE_COMMAND_UI
啟用和停用功能表項之處理程式的需求。
範例
// CMainFrame is application-defined object of type CFrameWnd
CMainFrame::CMainFrame()
: m_hDrawMenu(NULL), m_hDrawAccel(NULL), m_bCheck(false), m_nWindowTimer(0), m_nCallbackTimer(0)
{
// Set to FALSE so no ON_UPDATE_COMMAND_UI
// or ON_COMMAND handlers are needed, and
// CMenu::EnableMenuItem() will work as expected.
m_bAutoMenuEnable = FALSE;
}
CFrameWnd::NegotiateBorderSpace
呼叫此成員函式,在 OLE 就地啟用期間交涉框架視窗中的框線空間。
virtual BOOL NegotiateBorderSpace(
UINT nBorderCmd,
LPRECT lpRectBorder);
參數
nBorderCmd
包含下列其中一個值:enum BorderCmd
borderGet
= 1borderRequest
= 2borderSet
= 3
lpRectBorder
RECT
結構或CRect
對象指標,指定框線的座標。
傳回值
如果成功則為非零;否則為 0。
備註
這個成員函式是 CFrameWnd
OLE 邊界空間交涉的實作。
CFrameWnd::OnBarCheck
每當在指定的控制列上執行動作時呼叫。
afx_msg BOOL OnBarCheck(UINT nID);
參數
nID
顯示之控件列的標識碼。
傳回值
如果控件列存在,則為非零;否則為 0。
CFrameWnd::OnContextHelp
處理就地專案的 SHIFT+F1 說明。
afx_msg void OnContextHelp();
備註
若要啟用內容相關說明,您必須新增
ON_COMMAND(ID_CONTEXT_HELP, &CMainFrame::OnContextHelp)
語句至您的 CFrameWnd
類別訊息對應,並新增快速鍵數據表專案,通常是SHIFT+F1,以啟用此成員函式。
如果您的應用程式是 OLE 容器,請將 OnContextHelp
框架視窗物件中包含的所有就地專案放入 [說明] 模式。 游標會變更為箭號和問號,然後使用者可以移動滑鼠指標,然後按滑鼠左鍵來選取對話框、視窗、功能表或命令按鈕。 這個成員函式會使用游標下物件的 Help 內容呼叫 Windows WinHelp
函式。
CFrameWnd::OnCreateClient
執行 期間 OnCreate
由架構呼叫。
virtual BOOL OnCreateClient(
LPCREATESTRUCT lpcs,
CCreateContext* pContext);
參數
lpcs
Windows CREATESTRUCT
結構的指標。
pContext
結構的指標 CCreateContext
。
傳回值
如果成功則為非零;否則為 0。
備註
永遠不要呼叫此函式。
如果可能的話,此函式的預設實作會 CView
從 中 pContext
提供的資訊建立 物件。
覆寫此函式以覆寫物件中 CCreateContext
傳遞的值,或變更建立框架視窗主要工作區控件的方式。 您可以在 類別 CCreateContext
中 CCreateContext
描述您可以覆寫的成員。
注意
請勿取代結構中 CREATESTRUCT
傳遞的值。 它們僅供參考使用。 如果您要覆寫初始視窗矩形,例如,請覆寫 CWnd
成員函式 PreCreateWindow
。
CFrameWnd::OnHideMenuBar
當系統即將隱藏目前 MFC 應用程式中的功能表列時,就會呼叫此函式。
virtual void OnHideMenuBar();
備註
當系統即將隱藏功能表時,此事件處理程式可讓應用程式執行自定義動作。 您無法防止功能表隱藏,但您可以呼叫其他方法來擷取功能表樣式或狀態。
CFrameWnd::OnSetPreviewMode
呼叫這個成員函式,在預覽列印模式裡外設定應用程式的主框架視窗。
virtual void OnSetPreviewMode(
BOOL bPreview,
CPrintPreviewState* pState);
參數
bPreview
指定是否要將應用程式置於列印預覽模式。 將 設定為 以 TRUE
放置在列印預覽中, FALSE
以取消預覽模式。
pState
結構的指標 CPrintPreviewState
。
備註
默認實作會停用所有標準工具列,並隱藏主功能表和主客戶端視窗。 這會將 MDI 框架視窗轉換成暫時的 SDI 框架視窗。
覆寫此成員函式,以在列印預覽期間自定義控件列和其他框架視窗元件的隱藏和顯示。 從覆寫的版本內呼叫基類實作。
CFrameWnd::OnShowMenuBar
當系統即將在目前的MFC 應用程式中顯示功能表欄時,就會呼叫此函式。
virtual void OnShowMenuBar();
備註
此事件處理程式可讓應用程式在即將顯示功能表時執行自定義動作。 您無法防止功能表顯示,但您可以呼叫其他方法來擷取功能表樣式或狀態。
CFrameWnd::OnUpdateControlBarMenu
當相關聯的功能表更新時,由架構呼叫。
afx_msg void OnUpdateControlBarMenu(CCmdUI* pCmdUI);
參數
pCmdUI
物件的指標 CCmdUI
,表示產生更新命令的功能表。 更新處理程式會透過呼叫 Enable
對象的成員函式 CCmdUI
,以更新使用者 pCmdUI
介面。
CFrameWnd::RecalcLayout
在開啟或關閉標準控制列或調整框架窗口大小時,由架構呼叫。
virtual void RecalcLayout(BOOL bNotify = TRUE);
參數
bNotify
判斷框架視窗的作用中就地專案是否會收到版面配置變更的通知。 如果 TRUE
為 ,則會通知項目,否則 FALSE
為 。
備註
這個成員函式的預設實作會呼叫 CWnd
成員函 RepositionBars
式,以重新定位框架中的所有控制列,以及主客戶端視窗(通常是 CView
或 MDICLIENT
)。
覆寫此成員函式,以控制框架視窗版面配置變更后控制列的外觀和行為。 例如,當您開啟或關閉控制列或新增另一個控制列時呼叫它。
CFrameWnd::rectDefault
建立視窗以允許 Windows 選擇視窗的初始大小和位置時,將此靜態 CRect
傳遞為參數。
static AFX_DATA const CRect rectDefault;
CFrameWnd::SaveBarState
呼叫此函式來儲存框架視窗所擁有之每個控件列的相關信息。
void SaveBarState(LPCTSTR lpszProfileName) const;
參數
lpszProfileName
初始化檔案中的區段名稱,或儲存狀態資訊之 Windows 登錄中的機碼。
備註
這項資訊可以使用 從初始化檔案 LoadBarState
讀取。 儲存的資訊包括可見性、水準/垂直方向、停駐狀態,以及控制列位置。
CFrameWnd::SetActivePreviewView
指定指定的檢視為 Rich Preview 的作用中檢視。
void SetActivePreviewView(CView* pViewNew);
參數
pViewNew
要啟動之檢視的指標。
備註
CFrameWnd::SetActiveView
呼叫此成員函式以設定使用中檢視。
void SetActiveView(
CView* pViewNew,
BOOL bNotify = TRUE);
參數
pViewNew
指定物件的指標 CView
,或 NULL
針對沒有使用中檢視。
bNotify
指定檢視是否要收到啟用通知。 如果 TRUE
為 , OnActivateView
則會針對新檢視呼叫 ;如果 FALSE
為 ,則為 。
備註
當使用者將焦點變更為框架視窗內的檢視時,架構會自動呼叫此函式。 您可以明確地呼叫 SetActiveView
,將焦點變更為指定的檢視。
CFrameWnd::SetDockState
呼叫這個成員函式,將儲存在 物件中的 CDockState
狀態資訊套用至框架視窗的控制列。
void SetDockState(const CDockState& state);
參數
state
將預存狀態套用至框架視窗的控制列。
備註
若要還原控制列的先前狀態,您可以使用 或Serialize
載入預存狀態CDockState::LoadState
,然後使用 SetDockState
將它套用至框架視窗的控制列。 先前的狀態會儲存在物件中 CDockState
, GetDockState
CFrameWnd::SetMenuBarState
將目前 MFC 應用程式中選單的顯示狀態設定為隱藏或顯示。
virtual BOOL SetMenuBarState(DWORD nState);
參數
nState
[in]指定是否要顯示或隱藏功能表。 參數 nState
可以具有下列值:
AFX_MBS_VISIBLE
(0x01) - 隱藏功能表時顯示功能表,但如果顯示功能表,則不會有任何作用。AFX_MBS_HIDDEN
(0x02) - 如果顯示功能表,則隱藏功能表,但如果隱藏,則不會有任何作用。
傳回值
TRUE
如果此方法成功變更選單狀態,則為 ;否則為 FALSE
。
備註
如果發生運行時錯誤,這個方法會在偵錯模式中判斷提示,並引發衍生自 類別的 CException
例外狀況。
CFrameWnd::SetMenuBarVisibility
將目前 MFC 應用程式中選單的預設行為設定為隱藏或可見。
virtual void SetMenuBarVisibility(DWORD nStyle);
參數
nStyle
[in]指定功能表預設為隱藏,或為可見且具有焦點。 參數 nStyle
可以具有下列值:
AFX_MBV_KEEPVISIBLE
(0x01) - 功能表會隨時顯示,而且預設沒有焦點。AFX_MBV_DISPLAYONFOCUS
(0x02) - 預設會隱藏功能表。 如果隱藏功能表,請按ALT鍵來顯示功能表,並給予焦點。 如果顯示功能表,請按 ALT 或 ESC 鍵隱藏選單。AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10
(0x06) - 預設會隱藏功能表。 如果功能表已隱藏,請按 F10 鍵來顯示功能表,並給予焦點。 如果顯示功能表,請按 F10 鍵來切換功能表的焦點。 功能表會顯示,直到您按下 ALT 或 ESC 鍵來隱藏它為止。
備註
如果參數的值 nStyle
無效,這個方法會在偵錯模式中判斷提示,並在發行模式中引發 CInvalidArgException
。 如果發生其他運行時錯誤,這個方法會在偵錯模式中判斷提示,並引發衍生自 類別的 CException
例外狀況。
此方法會影響針對 Windows Vista 和更新版本所撰寫之應用程式中的功能表狀態。
CFrameWnd::SetMessageText
呼叫此函式,在狀態列窗格中放置標識碼為 0 的字串。
void SetMessageText(LPCTSTR lpszText);
void SetMessageText(UINT nID);
參數
lpszText
指向要放在狀態列上的字串。
nID
要置於狀態列之字串的字串資源標識元。
備註
這通常是狀態列最左邊且最長的窗格。
CFrameWnd::SetProgressBarPosition
設定任務列上顯示之 Windows 7 進度列的目前位置。
void SetProgressBarPosition(int nProgressPos);
參數
nProgressPos
指定要設定的位置。 它必須位於 所 SetProgressBarRange
設定的範圍內。
備註
CFrameWnd::SetProgressBarRange
設定任務列上顯示之 Windows 7 進度列的範圍。
void SetProgressBarRange(
int nRangeMin,
int nRangeMax);
參數
nRangeMin
最小值。
nRangeMax
最大值。
備註
CFrameWnd::SetProgressBarState
設定任務列按鈕上顯示的進度指示器類型和狀態。
void SetProgressBarState(TBPFLAG tbpFlags);
參數
tbpFlags
旗標,控制進度按鈕的目前狀態。 只指定下列其中一個旗標,因為所有狀態都是互斥的:TBPF_NOPROGRESS
、、TBPF_INDETERMINATE
TBPF_NORMAL
、、 TBPF_ERROR
TBPF_PAUSED
。
備註
CFrameWnd::SetTaskbarOverlayIcon
已多載。 將重迭套用至任務欄按鈕,以指出應用程式狀態或通知使用者。
BOOL SetTaskbarOverlayIcon(
UINT nIDResource,
LPCTSTR lpcszDescr);
BOOL SetTaskbarOverlayIcon(
HICON hIcon,
LPCTSTR lpcszDescr);
參數
nIDResource
指定要做為重疊之圖標的資源標識碼。 如需詳細資訊,請參閱描述 hIcon
。
lpcszDescr
字串的指標,提供覆疊所傳達之資訊的替換文字版本,以供輔助功能之用。
hIcon
要當做重疊之圖標的句柄。 這應該是一個小圖示,測量 16x16 像素,每英吋 96 點 (dpi)。 如果重迭圖示已套用至任務欄按鈕,則會取代現有的重疊。 這個值可以是 NULL
。 NULL
處理值的方式取決於任務列按鈕代表單一視窗或視窗群組。 當不再需要應用程式時,呼叫應用程式會負責釋放 hIcon
。
傳回值
TRUE
如果成功,則為 ; FALSE
如果 OS 版本小於 Windows 7,或設定圖示時發生錯誤,則為 。
備註
CFrameWnd::SetTitle
設定視窗物件的標題。
void SetTitle(LPCTSTR lpszTitle);
參數
lpszTitle
包含視窗物件的標題之字元字串的指標。
CFrameWnd::ShowControlBar
呼叫這個成員函式以顯示或隱藏控制列。
void ShowControlBar(
CControlBar* pBar,
BOOL bShow,
BOOL bDelay);
參數
pBar
要顯示或隱藏之控制列的指標。
bShow
如果 TRUE
為 ,則會指定要顯示控制列。 如果 FALSE
為 ,則指定要隱藏控制列。
bDelay
如果 TRUE
為 ,則顯示控制列的延遲。 如果 FALSE
為 ,請立即顯示控制列。
CFrameWnd::ShowOwnedWindows
呼叫這個成員函式以顯示物件子系 CFrameWnd
的所有視窗。
void ShowOwnedWindows(BOOL bShow);
參數
bShow
指定要顯示或隱藏擁有的視窗。
另請參閱
CWnd
類
階層架構圖表
CWnd
類
CMDIFrameWnd
類
CMDIChildWnd
類
CView
類
CDocTemplate
類
CRuntimeClass
結構