Share via


CFrameWnd 類別

提供 Windows 單一文件介面 (SDI) 重疊或快顯框架視窗的功能,以及管理視窗的成員。

語法

class CFrameWnd : public CWnd

成員

公用建構函式

名稱 描述
CFrameWnd::CFrameWnd 建構 CFrameWnd 物件。

公用方法

名稱 描述
CFrameWnd::ActivateFrame 讓使用者看見畫面並可供使用者使用。
CFrameWnd::BeginModalState 將框架視窗設定為強制回應。
CFrameWnd::Create 呼叫 以建立和初始化與 CFrameWnd 物件相關聯的 Windows 框架視窗。
CFrameWnd::CreateView 在不是衍生自 CView 的框架內建立檢視。
CFrameWnd::DockControlBar 停駐控制列。
CFrameWnd::EnableDocking 允許停駐控制列。
CFrameWnd::EndModalState 結束框架視窗的強制回應狀態。 啟用 已 BeginModalState 停用的所有視窗。
CFrameWnd::FloatControlBar 浮動控制列。
CFrameWnd::GetActiveDocument 傳回使用 CDocument 中物件。
CFrameWnd::GetActiveFrame 傳回使用 CFrameWnd 中物件。
CFrameWnd::GetActiveView 傳回使用 CView 中物件。
CFrameWnd::GetControlBar 擷取控制列。
CFrameWnd::GetDockState 擷取框架視窗的停駐狀態。
CFrameWnd::GetMenuBarState 擷取目前 MFC 應用程式中功能表的顯示狀態。
CFrameWnd::GetMenuBarVisibility 指出目前 MFC 應用程式中功能表的預設行為是否為隱藏或可見。
CFrameWnd::GetMessageBar 傳回屬於框架視窗的狀態列指標。
CFrameWnd::GetMessageString 擷取對應至命令識別碼的訊息。
CFrameWnd::GetTitle 擷取相關控制列的標題。
CFrameWnd::InitialUpdateFrame OnInitialUpdate導致呼叫屬於框架視窗中所有檢視的成員函式。
CFrameWnd::InModalState 傳回值,指出框架視窗是否處於強制回應狀態。
CFrameWnd::IsTracking 判斷分割器列目前是否正在移動。
CFrameWnd::LoadAccelTable 呼叫 以載入快速鍵資料表。
CFrameWnd::LoadBarState 呼叫 以還原控制列設定。
CFrameWnd::LoadFrame 呼叫 以從資源資訊動態建立框架視窗。
CFrameWnd::NegotiateBorderSpace 交涉框架視窗中的框線空間。
CFrameWnd::OnBarCheck 每當在指定的控制列上執行動作時呼叫。
CFrameWnd::OnContextHelp 處理就地專案的 SHIFT+F1 說明。
CFrameWnd::OnSetPreviewMode 將應用程式的主框架視窗設定為預覽列印模式和輸出模式。
CFrameWnd::OnUpdateControlBarMenu 當相關聯的功能表更新時,由架構呼叫。
CFrameWnd::RecalcLayout 重新置放物件的控制列 CFrameWnd
CFrameWnd::SaveBarState 呼叫 以儲存控制列設定。
CFrameWnd::SetActivePreviewView 指定指定的檢視為 Rich Preview 的作用中檢視。
CFrameWnd::SetActiveView 設定使用 CView 中物件。
CFrameWnd::SetDockState 呼叫 以將框架視窗停駐在主視窗中。
CFrameWnd::SetMenuBarState 將目前 MFC 應用程式中功能表的顯示狀態設定為隱藏或顯示。
CFrameWnd::SetMenuBarVisibility 將目前 MFC 應用程式中功能表的預設行為設定為隱藏或可見。
CFrameWnd::SetMessageText 設定標準狀態列的文字。
CFrameWnd::SetProgressBarPosition 設定工作列上顯示之 Windows 7 進度列的目前位置。
CFrameWnd::SetProgressBarRange 設定工作列上顯示的 Windows 7 進度列範圍。
CFrameWnd::SetProgressBarState 設定工作列按鈕上顯示的進度指示器類型和狀態。
CFrameWnd::SetTaskbarOverlayIcon 已多載。 將重迭套用至工作列按鈕,以指出應用程式狀態或通知給使用者。
CFrameWnd::SetTitle 設定相關控制項列的標題。
CFrameWnd::ShowControlBar 呼叫 以顯示控制列。
CFrameWnd::ShowOwnedWindows 顯示物件子代 CFrameWnd 的所有視窗。

受保護的方法

名稱 描述
CFrameWnd::OnCreateClient 建立框架的用戶端視窗。
CFrameWnd::OnHideMenuBar 在隱藏目前 MFC 應用程式中的功能表之前呼叫。
CFrameWnd::OnShowMenuBar 在顯示目前 MFC 應用程式中的功能表之前呼叫。

公用資料成員

名稱 描述
CFrameWnd::m_bAutoMenuEnable 控制功能表項目的自動啟用和停用功能。
CFrameWnd::rectDefault 建立 CFrameWnd 物件時,將此靜態 CRect 傳遞為參數,以允許 Windows 選擇視窗的初始大小和位置。

備註

若要為您的應用程式建立有用的框架視窗,請從 CFrameWnd 衍生類別。 將成員變數新增至衍生類別,以儲存應用程式特定的資料。 實作訊息處理常式成員函式,和衍生類別中對應的訊息,以指定訊息被導向至視窗時會發生什麼事。

建構框架視窗的方式有三種:

  • 使用 Create 直接建構它。

  • 使用 LoadFrame 直接建構它。

  • 使用檔範本間接建構它。

在呼叫 CreateLoadFrame 之前,您必須使用 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 來通知使用中檢視。

  • 命令訊息和許多常見的框架通知訊息,包括 、 和 CWndOnVScroll 函式所 OnSetFocusOnHScroll 處理的訊息,是由 CFrameWnd 框架視窗委派給目前使用中檢視。

  • 目前使用中的檢視(或 MDI 框架的目前作用中 MDI 子框架視窗)可以判斷框架視窗的標題。 關閉框架視窗的樣式位,即可停用 FWS_ADDTOTITLE 此功能。

  • CFrameWnd框架視窗會管理控制列、檢視和其他子視窗在框架視窗工作區內的位置。 框架視窗也會執行工具列和其他控制列按鈕的閒置時間更新。 CFrameWnd框架視窗也有用來切換工具列和狀態列之命令的預設實作。

  • CFrameWnd框架視窗會管理主功能表列。 顯示快顯功能表時,框架視窗會使用 UPDATE_COMMAND_UI 機制來判斷應啟用、停用或核取哪些功能表項目。 當使用者選取功能表項目時,框架視窗會使用該命令的訊息字串來更新狀態列。

  • CFrameWnd框架視窗有選擇性的快速鍵表格,可自動翻譯鍵盤快速鍵。

  • CFrameWnd框架視窗具有選擇性的說明識別碼, LoadFrame 用於內容相關說明。 框架視窗是半模式狀態的主要協調器,例如上下文相關說明 (SHIFT+F1) 和預覽列印模式。

  • CFrameWnd框架視窗會開啟從 [檔案管理員] 拖曳的檔案,並放在框架視窗上。 如果註冊了副檔名並與應用程式相關聯,框架視窗就會回應動態資料交換 (DDE) 開啟要求,該要求會在使用者開啟檔案管理員中的資料檔或呼叫 Windows 函式時 ShellExecute 發生。

  • 如果框架視窗是主要應用程式視窗(也就是 CWinThread::m_pMainWnd ),當使用者關閉應用程式時,框架視窗會提示使用者儲存任何修改的檔(針對 OnCloseOnQueryEndSession )。

  • 如果框架視窗是主要應用程式視窗,框架視窗就是執行 WinHelp 的內容。 如果已啟動此應用程式的說明,關閉框架視窗將會關閉 WINHELP.EXE

請勿使用 C++ delete 運算子終結框架視窗。 請改用 CWnd::DestroyWindow。 當視窗終結時,的 CFrameWndPostNcDestroy 實作將會刪除 C++ 物件。 當使用者關閉框架視窗時,預設 OnClose 處理常式會呼叫 DestroyWindow

如需 的詳細資訊 CFrameWnd ,請參閱 Frame Windows

繼承階層架構

CObject

CCmdTarget

CWnd

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::EnableDockingCFrameWnd::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::SaveStateSerialize 如果您稍後想要將控制列還原為先前的狀態,請使用 或 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 ,您可以將 引數設定 pContextNULL

CFrameWnd::m_bAutoMenuEnable

啟用此資料成員(也就是預設值),當使用者下拉式功能表時,不會有 ON_UPDATE_COMMAND_UION_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 = 1

  • borderRequest = 2

  • borderSet = 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 傳遞的值,或變更建立框架視窗主要工作區控制項的方式。 您可以在 類別 CCreateContextCCreateContext 描述您可以覆寫的成員。

注意

請勿取代結構中 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 式,以重新置放框架中的所有控制列,以及主用戶端視窗(通常是 CViewMDICLIENT )。

覆寫此成員函式,以控制框架視窗版面配置變更後控制列的外觀和行為。 例如,當您開啟或關閉控制列或新增另一個控制列時呼叫它。

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 將它套用至框架視窗的控制列。 先前的狀態會儲存在 物件中 CDockStateGetDockState

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_INDETERMINATETBPF_NORMAL 、、 TBPF_ERRORTBPF_PAUSED

備註

CFrameWnd::SetTaskbarOverlayIcon

已多載。 將重迭套用至工作列按鈕,以指出應用程式狀態或通知使用者。

BOOL SetTaskbarOverlayIcon(
    UINT nIDResource,
    LPCTSTR lpcszDescr);

BOOL SetTaskbarOverlayIcon(
    HICON hIcon,
    LPCTSTR lpcszDescr);

參數

nIDResource
指定要做為重迭之圖示的資源識別碼。 如需詳細資訊,請參閱描述 hIcon

lpcszDescr
字串的指標,提供覆迭所傳達之資訊的替代文字版本,以供協助工具之用。

hIcon
要當做重迭之圖示的控制碼。 這應該是一個小圖示,測量 16x16 圖元,每英吋 96 點 (DPI)。 如果重迭圖示已套用至工作列按鈕,則會取代現有的重迭。 這個值可以是 NULLNULL處理值的方式取決於工作列按鈕代表單一視窗或視窗群組。 當不再需要應用程式時,呼叫應用程式會負責釋放 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 結構