CControlBar Class
Control-bar 類別的基類 CStatusBar、CToolBar、CDialogBar、CReBar 和 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
,請參閱:
繼承階層架構
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
指向要用來呈現控制列框線和夾板的裝置內容。
備註
覆寫此函式以自定義控制列的繪圖行為。
另一個自定義方法是覆寫 DrawBorders
和 DrawGripper
函式,並新增框線和夾板的自定義繪圖程序代碼。 由於預設方法會 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::EnableDocking 和 CFrameWnd::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 類別