分享方式:


CControlBar Class

Control-bar 類別的基類 CStatusBar、CToolBarCDialogBarCReBar 和 COleResizeBar

語法

class CControlBar : public CWnd

成員

受保護的建構函式

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

公用方法

名稱 描述
CControlBar::CalcDynamicLayout 以 CSize 物件傳回動態控制列的大小。
CControlBar::CalcFixedLayout 傳回控件列的大小做為 CSize 物件。
CControlBar::CalcInsideRect 傳回控制列區域的目前維度;包括框線。
CControlBar::D oPaint 呈現控件列的框線和夾點。
CControlBar::D rawBorders 呈現控件列的框線。
CControlBar::D rawGripper 轉譯控件列的夾板。
CControlBar::EnableDocking 允許停駐或浮動控制列。
CControlBar::GetBarStyle 擷取控制列樣式設定。
CControlBar::GetBorders 擷取控件列的框線值。
CControlBar::GetCount 傳回控制列中非 HWND 元素的數目。
CControlBar::GetDockingFrame 傳回控件列停駐之框架的指標。
CControlBar::IsFloating 如果有問題的控件列是浮動控件列,則傳回非零值。
CControlBar::OnUpdateCmdUI 呼叫命令 UI 處理程式。
CControlBar::SetBarStyle 修改控制項列樣式設定。
CControlBar::SetBorders 設定控制元件列的框線值。
CControlBar::SetInPlaceOwner 變更控制列的就地擁有者。

公用資料成員

名稱 描述
CControlBar::m_bAutoDelete 如果不是零,則會 CControlBar 在終結 Windows 控件列時刪除物件。
CControlBar::m_pInPlaceOwner 控件列的就地擁有者。

備註

控制列是通常對齊框架視窗左邊或右邊的視窗。 它可能包含屬於 HWND 型控件的子專案,這些是產生和回應 Windows 訊息的視窗,或非 HWND 型專案,這些專案不是視窗,而且是由應用程式程式代碼或架構程式代碼所管理。 清單框和編輯控件是 HWND 型控件的範例;狀態列窗格和位圖按鈕是非 HWND 型控件的範例。

控制列視窗通常是父框架視窗的子視窗,通常是框架視窗的客戶端檢視或 MDI 用戶端的同層級視窗。 CControlBar物件會使用父視窗用戶端矩形的相關信息來定位本身。 然後,它會通知父視窗在父視窗的工作區中未配置多少空間。

如需 的詳細資訊 CControlBar,請參閱:

繼承階層架構

CObject

CCmdTarget

CWnd

CControlBar

需求

標頭: afxext.h

CControlBar::CalcDynamicLayout

架構會呼叫這個成員函式來計算動態工具列的維度。

virtual CSize CalcDynamicLayout(
    int nLength,
    DWORD nMode);

參數

nLength
控件列的要求維度,視 dwMode 而定,水準或垂直。

nMode
下列預先定義的旗標可用來判斷動態控制列的高度和寬度。 使用 bitwise-OR (|) 運算子來結合旗標。

版面配置模式旗標 代表的意義
LM_STRETCH 指出控件列是否應該延展至框架的大小。 如果列不是停駐列,請設定 (不適用於停駐)。 當列停駐或浮動時,請勿設定 (可供停駐)。 如果設定,LM_STRETCH會忽略 nLength ,並根據LM_HORZ狀態傳回維度。 LM_STRETCH的運作方式類似於 CalcFixedLayout 中使用的 bStretch 參數;如需延展與方向之間關聯性的詳細資訊,請參閱該成員函式。
LM_HORZ 表示橫條為水準或垂直方向。 如果橫條為水準方向,且為垂直方向,則設定為未設定。 LM_HORZ的運作方式類似於 CalcFixedLayout 中使用的 bHorz 參數;如需延展與方向之間關聯性的詳細資訊,請參閱該成員函式。
LM_MRUWIDTH 最近使用的動態寬度。 忽略 nLength 參數,並使用最近使用過的寬度。
LM_HORZDOCK 水平停駐維度。 忽略 nLength 參數,並傳回寬度最大的動態大小。
LM_VERTDOCK 垂直固定維度。 忽略 nLength 參數,並傳回最大高度的動態大小。
LM_LENGTHY 設定 nLength 表示高度 (Y 方向) 而不是寬度。
LM_COMMIT 將LM_MRUWIDTH重設為目前浮動控制列的寬度。

傳回值

CSize 物件的控制列大小,以像素為單位。

備註

覆寫此成員函式,在衍生自 CControlBar的類別中提供您自己的動態配置。 衍生自 CControlBar的 MFC 類別,例如 CToolbar,會覆寫此成員函式並提供自己的實作。

CControlBar::CalcFixedLayout

呼叫這個成員函式來計算控制列的水準大小。

virtual CSize CalcFixedLayout(
    BOOL bStretch,
    BOOL bHorz);

參數

bStretch
指出長條是否應該延展至框架的大小。 當條形圖不是停駐列(不適用於停駐)時,bStretch 參數是非零的,當停駐或浮動時為 0。當列停駐或浮動時,則為 0。

bHorz
表示橫條為水準或垂直方向。 如果橫條為水準方向,則 bHorz 參數為非零,如果垂直方向則為 0。

傳回值

物件的控制列大小,以像素 CSize 為單位。

備註

工具列之類的控制列可以水平或垂直縮放,以容納控制列中包含的按鈕。

如果 bStretch 為 TRUE,請沿著 bHorz 提供的方向延伸維度。 換句話說,如果 bHorz 為 FALSE,則控制列會垂直延展。 如果 bStretch 為 FALSE,則不會發生任何延展。 下表顯示 bStretch 和 bHorz 的可能排列和產生的控件列樣式

bStretch bHorz 伸展 方向 停駐/未停駐
TRUE TRUE 水平延展 水準方向 未停駐
true FALSE 垂直延展 垂直方向 未停駐
FALSE TRUE 沒有可用的延展功能 水準方向 銜接
FALSE FALSE 沒有可用的延展功能 垂直方向 銜接

CControlBar::CalcInsideRect

架構會呼叫此函式來計算控制列的工作區。

virtual void CalcInsideRect(
    CRect& rect,
    BOOL bHorz) const;

參數

rect
包含控制項列的目前維度;包括框線。

bHorz
表示橫條為水準或垂直方向。 如果橫條為水準方向,則 bHorz 參數為非零,如果垂直方向則為 0。

備註

在繪製控制列之前,會呼叫此函式。

覆寫此函式,以自定義控件列框線和夾板列的轉譯。

CControlBar::CControlBar

建構 CControlBar 物件。

CControlBar();

CControlBar::D oPaint

由架構呼叫,以呈現控件列的框線和夾板列。

virtual void DoPaint(CDC* pDC);

參數

pDC
指向要用來呈現控制列框線和夾板的裝置內容。

備註

覆寫此函式以自定義控制列的繪圖行為。

另一個自定義方法是覆寫 DrawBordersDrawGripper 函式,並新增框線和夾板的自定義繪圖程序代碼。 由於預設方法會 DoPaint 呼叫這些方法,因此不需要 覆寫 DoPaint

CControlBar::D rawBorders

由架構呼叫以呈現控件列的框線。

virtual void DrawBorders(
    CDC* pDC,
    CRect& rect);

參數

pDC
指向要用來呈現控制列框線的裝置內容。

rect
CRect物件,包含控制列的維度。

備註

覆寫此函式以自定義控件列框線的外觀。

CControlBar::D rawGripper

由架構呼叫,以轉譯控件列的移轉夾。

virtual void DrawGripper(
    CDC* pDC,
    const CRect& rect);

參數

pDC
指向要用來轉譯控件列夾夾的裝置內容。

rect
CRect物件,包含控制列夾的維度。

備註

覆寫此函式以自定義控制列夾的外觀。

CControlBar::EnableDocking

呼叫此函式,讓控制列停駐。

void EnableDocking(DWORD dwDockStyle);

參數

dwDockStyle
指定控件列是否支援停駐,以及控件列可停駐的父視窗側邊。如果支持的話。 可以是下列其中一或多個專案:

  • CBRS_ALIGN_TOP 允許在工作區頂端停駐。

  • CBRS_ALIGN_BOTTOM 允許在工作區底部停駐。

  • CBRS_ALIGN_LEFT 允許在工作區左側停駐。

  • CBRS_ALIGN_RIGHT允許在工作區右側停駐。

  • CBRS_ALIGN_ANY 允許在工作區的任何一端停駐。

  • CBRS_FLOAT_MULTI 允許在單一迷你框架視窗中浮動多個控制列。

如果 0 (也就是表示沒有旗標),則控制列將不會停駐。

備註

指定的側邊必須符合在目的地框架視窗中啟用停駐的其中一個側邊,否則控件列無法停駐到該框架視窗。

CControlBar::GetBarStyle

呼叫此函式,以判斷控件列目前設定的 CBRS_ (控制樣式) 設定。

DWORD GetBarStyle();

傳回值

控制元件列目前的 CBRS_ (控制樣式) 設定。 如需可用樣式的完整清單,請參閱 CControlBar::SetBarStyle

備註

不會處理 WS_ (視窗樣式) 樣式。

CControlBar::GetBorders

傳回控件列的目前框線值。

CRect GetBorders() const;

傳回值

CRect物件,包含控制列物件每個側的目前寬度(以像素為單位)。 例如,CRect 物件的左成員是左側框線的寬度。

CControlBar::GetCount

傳回物件上 CControlBar 非 HWND 項目的數目。

int GetCount() const;

傳回值

物件上的 CControlBar 非 HWND 項目數目。 此函式會針對 CDialogBar 物件傳回 0。

備註

項目的類型取決於衍生物件:CStatusBar 物件的窗格,以及 CToolBar 物件的按鈕和分隔符

CControlBar::GetDockingFrame

呼叫這個成員函式,以取得控件列停駐目前框架視窗的指標。

CFrameWnd* GetDockingFrame() const;

傳回值

如果成功,則為框架視窗的指標;否則為 NULL。

如果控制列未停駐到框架視窗(也就是控件列浮動),此函式會傳回其父 CMiniFrameWnd 的指標。

備註

如需可停駐控制列的詳細資訊,請參閱 CControlBar::EnableDockingCFrameWnd::D ockControlBar

CControlBar::IsFloating

呼叫這個成員函式,以判斷控制列是否浮動或停駐。

BOOL IsFloating() const;

傳回值

如果控制列是浮動的,則為非零;否則為 0。

備註

若要將控制列的狀態從停駐變更為浮動,請呼叫 CFrameWnd::FloatControlBar

CControlBar::m_bAutoDelete

如果不是零,則會 CControlBar 在終結 Windows 控件列時刪除物件。

BOOL m_bAutoDelete;

備註

m_bAutoDelete是 BOOL 類型的公用變數。

Control-bar 物件通常內嵌在框架窗口物件中。 在此情況下,m_bAutoDelete為 0,因為框架窗口終結時會終結內嵌的控件列物件。

如果您在堆積上配置 CControlBar 物件,而且不打算呼叫 delete,請將此變數設定為非零值。

CControlBar::m_pInPlaceOwner

控件列的就地擁有者。

CWnd* m_pInPlaceOwner;

CControlBar::OnUpdateCmdUI

架構會呼叫此成員函式,以更新工具列或狀態列的狀態。

virtual void OnUpdateCmdUI(
    CFrameWnd* pTarget,
    BOOL bDisableIfNoHndler) = 0;

參數

pTarget
指向應用程式的主框架視窗。 此指標用於路由更新訊息。

bDisableIfNoHndler
指出沒有更新處理程式的控制項是否應該自動顯示為停用的旗標。

備註

若要更新個別按鈕或窗格,請使用訊息對應中的ON_UPDATE_COMMAND_UI 巨集適當地設定更新處理程式。 如需使用此巨集的詳細資訊,請參閱 ON_UPDATE_COMMAND_UI

OnUpdateCmdUI 應用程式閑置時由架構呼叫。 要更新的框架窗口必須是可見框架視窗的子視窗,至少間接。 OnUpdateCmdUI 是進階可覆寫的。

CControlBar::SetBarStyle

呼叫此函式,以設定控件列所需的 CBRS_ 樣式。

void SetBarStyle(DWORD dwStyle);

參數

dwStyle
控件列所需的樣式。 可以是下列其中一或多個專案:

  • CBRS_ALIGN_TOP 允許將控制列停駐在框架視窗的工作區頂端。

  • CBRS_ALIGN_BOTTOM 允許控制列停駐到框架視窗工作區底部。

  • CBRS_ALIGN_LEFT 允許將控制列停駐在框架視窗工作區的左側。

  • CBRS_ALIGN_RIGHT 允許將控制列停駐在框架視窗工作區的右側。

  • CBRS_ALIGN_ANY 允許將控制列停駐到框架視窗工作區的任何一側。

  • CBRS_BORDER_TOP 會導致在控件列的上邊緣繪製框線時,顯示框線。

  • CBRS_BORDER_BOTTOM 使控件列的下邊緣繪製框線時,該框線會顯示。

  • CBRS_BORDER_LEFT 會導致在顯示控件列左邊緣繪製框線。

  • CBRS_BORDER_RIGHT會在顯示框線時,在控件列的右邊緣繪製框線。

  • CBRS_FLOAT_MULTI 允許在單一迷你框架視窗中浮動多個控制列。

  • CBRS_TOOLTIPS導致控件列顯示工具提示。

  • CBRS_FLYBY會導致訊息正文與工具提示同時更新。

  • CBRS_GRIPPER 讓夾住器,類似於物件中 CReBar 帶狀上所使用的移駐器,以繪製任何 CControlBar衍生類別。

備註

不會影響 WS_ (視窗樣式) 設定。

CControlBar::SetBorders

呼叫此函式以設定控制列框線的大小。

void SetBorders(
    int cxLeft = 0,
    int cyTop = 0,
    int cxRight = 0,
    int cyBottom = 0);

void SetBorders(LPCRECT lpRect);

參數

cxLeft
控件列左框線的寬度(以像素為單位)。

cyTop
控制列上框線的高度(以像素為單位)。

cxRight
控件列右框線的寬度(以像素為單位)。

cyBottom
控件列下框線的高度(以像素為單位)。

lpRect
CRect 物件的指標,其中包含控制元件列物件之每個框線的目前寬度(以像素為單位)。

範例

下列程式代碼範例會將控制列的上框線和下框線設定為 5 像素,並將左右框線設定為 2 像素:

CControlBar &m_myControlBar = m_Rebar;
m_myControlBar.SetBorders(2, 5, 2, 5);

CControlBar::SetInPlaceOwner

變更控制列的就地擁有者。

void SetInPlaceOwner(CWnd* pWnd);

參數

pWnd
CWnd 物件的指標。

備註

另請參閱

MFC 範例 CTRLBARS
CWnd 類別
階層架構圖表
CToolBar 類別
CDialogBar 類別
CStatusBar 類別
CReBar 類別