CMFCToolBarMenuButton 類別

包含快顯功能表的工具列按鈕。 如需更多詳細資料,請參閱 Visual Studio 安裝位置下之 VC\atlmfc\src\mfc 資料夾中的原始程式碼。

語法

class CMFCToolBarMenuButton : public CMFCToolBarButton

成員

公用建構函式

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

公用方法

名稱 描述
CMFCToolBarMenuButton::CompareWith 比較這個實例與提供的 CMFCToolBarButton 物件。 (覆寫 CMFCToolBarButton::CompareWith.)
CMFCToolBarMenuButton::CopyFrom 將另一個工具列按鈕的屬性複製到目前的按鈕。 (覆寫 CMFCToolBarButton::CopyFrom.)
CMFCToolBarMenuButton::CreateFromMenu 從 Windows 功能表句柄初始化工具列選單。
CMFCToolBarMenuButton::CreateMenu 建立 Windows 功能表,其中包含工具列功能表中的命令。 傳回 Windows 功能表的句柄。
CMFCToolBarMenuButton::CreatePopupMenu 建立快捷功能表物件 ( CMFCPopupMenu 類別)以顯示工具列功能表。
CMFCToolBarMenuButton::EnableQuickCustomize
CMFCToolBarMenuButton::GetCommands 提供工具列功能表中命令清單的唯讀存取權。
CMFCToolBarMenuButton::GetImageRect 擷取按鈕影像的周框。
CMFCToolBarMenuButton::GetPaletteRows 當功能表處於調色盤模式時,傳回快捷功能表中的數據列數目。
CMFCToolBarMenuButton::GetPopupMenu 傳回與按鈕相關聯的快捷功能表物件的指標。
CMFCToolBarMenuButton::HasButton
CMFCToolBarMenuButton::HaveHotBorder 決定當使用者選取按鈕時,是否顯示按鈕的框線。 (覆寫 CMFCToolBarButton::HaveHotBorder.)
CMFCToolBarMenuButton::IsBorder
CMFCToolBarMenuButton::IsClickedOnMenu
CMFCToolBarMenuButton::IsDroppedDown 判斷是否顯示快顯功能表。
CMFCToolBarMenuButton::IsEmptyMenuAllowed 由架構呼叫,以判斷使用者是否可以從選取的功能表項開啟子功能表。
CMFCToolBarMenuButton::IsExclusive 判斷按鈕是否處於獨佔模式,也就是說,即使使用者將指標移到另一個工具列或按鈕上,快捷功能表還是保持開啟狀態。
CMFCToolBarMenuButton::IsMenuPaletteMode 判斷快捷功能表是否處於調色盤模式。
CMFCToolBarMenuButton::IsQuickMode
CMFCToolBarMenuButton::IsTearOffMenu 判斷快捷功能表是否有卸除列。
CMFCToolBarMenuButton::OnAfterCreatePopupMenu
CMFCToolBarMenuButton::OnBeforeDrag 指定是否可以拖曳按鈕。 (覆寫 CMFCToolBarButton::OnBeforeDrag.)
CMFCToolBarMenuButton::OnCalculateSize 由架構呼叫,以計算指定裝置內容和停駐狀態的按鈕大小。 (覆寫 CMFCToolBarButton::OnCalculateSize.)
CMFCToolBarMenuButton::OnCancelMode 由架構呼叫以處理 WM_CANCELMODE 訊息。 (覆寫 CMFCToolBarButton::OnCancelMode.)
CMFCToolBarMenuButton::OnChangeParentWnd 當按鈕插入新的工具列時,由架構呼叫。 (覆寫 CMFCToolBarButton::OnChangeParentWnd.)
CMFCToolBarMenuButton::OnClick 當使用者按鍵時,由架構呼叫。 (覆寫 CMFCToolBarButton::OnClick.)
CMFCToolBarMenuButton::OnClickMenuItem 當使用者在快捷功能表中選取專案時,由架構呼叫。
CMFCToolBarMenuButton::OnContextHelp 當父工具列處理WM_HELPHITTEST訊息時,由架構呼叫。 (覆寫 CMFCToolBarButton::OnContextHelp.)
CMFCToolBarMenuButton::OnDraw 由架構呼叫,以使用指定的樣式和選項繪製按鈕。 (覆寫 CMFCToolBarButton::OnDraw.)
CMFCToolBarMenuButton::OnDrawOnCustomizeList 由架構呼叫,以在 [自定義] 對話框的 [命令] 窗格中繪製按鈕。 (覆寫 CMFCToolBarButton::OnDrawOnCustomizeList.)
CMFCToolBarMenuButton::OpenPopupMenu 當用戶開啟快捷功能表時,由架構呼叫。
CMFCToolBarMenuButton::ResetImageToDefault 將 設定為與按鈕相關聯的影像預設值。 (覆寫 CMFCToolBarButton::ResetImageToDefault.)
CMFCToolBarMenuButton::SaveBarState 儲存工具列按鈕的狀態。 (覆寫 CMFCToolBarButton::SaveBarState.)
CMFCToolBarMenuButton::Serialize 從封存讀取此物件,或將它寫入封存。 (覆寫 CMFCToolBarButton::Serialize.)
CMFCToolBarMenuButton::SetACCData 使用工具列按鈕中的輔助功能數據填入提供的 CAccessibilityData 物件。 (覆寫 CMFCToolBarButton::SetACCData.)
CMFCToolBarMenuButton::SetMenuOnly 指定是否可以將按鈕新增至工具列。
CMFCToolBarMenuButton::SetMenuPaletteMode 指定快捷功能表是否處於調色盤模式。
CMFCToolBarMenuButton::SetMessageWnd
CMFCToolBarMenuButton::SetRadio 強制工具列功能表按鈕顯示圖示,指出已選取它。
CMFCToolBarMenuButton::SetTearOff 指定快捷功能表的卸除列標識碼。

受保護的方法

名稱 描述
CMFCToolBarMenuButton::D rawDocumentIcon 在功能表按鈕上繪製圖示。

資料成員

名稱 描述
CMFCToolBarMenuButton::m_bAlwaysCallOwnerDraw 如果為 TRUE,架構一律會在繪製按鈕時呼叫 CFrameWndEx::OnDrawMenuImage

備註

CMFCToolBarMenuButton可以顯示為功能表、具有子功能表的功能表項、執行命令或顯示功能表的按鈕,或只顯示功能表的按鈕。 您可以藉由指定與建構 CMFCToolbarMenuButton::CMFCToolbarMenuButton函式中按鈕相關聯之按鈕的參數,例如影像、文字、功能表句柄和命令標識元,來判斷功能表按鈕的行為和外觀。

衍生自 類別的 CMFCToolbarMenuButton 自定義類別必須使用 DECLARE_SERIAL 巨集。 當 應用程式關閉時,DECLARE_DYNCREATE 巨集會產生錯誤。

範例

下列範例示範如何設定 CMFCToolBarMenuButton 物件。 此程式代碼說明如何指定下拉功能表處於調色盤模式,並指定當使用者將功能表按鈕拖離功能表欄時所建立的卸除列識別元。 此程式碼片段是 WordPad 範例的一部分。

pBorderType->SetMenuPaletteMode(TRUE, 2 /* Rows number */);
pBorderType->SetTearOff(ID_BORDER_TEAROFF);

繼承階層架構

CObject

CMFCToolBarButton

CMFCToolBarMenuButton

需求

標頭: afxtoolbarmenubutton.h

CMFCToolBarMenuButton::CMFCToolBarMenuButton

建構 CMFCToolBarMenuButton 物件。

CMFCToolBarMenuButton();
CMFCToolBarMenuButton(const CMFCToolBarMenuButton& src);

CMFCToolBarMenuButton(
    UINT uiID,
    HMENU hMenu,
    int iImage,
    LPCTSTR lpszText=NULL,
    BOOL bUserButton=FALSE);

參數

src
[in]要複製到這個CMFCToolBarMenuButton物件的現有CMFCToolBarMenuButton物件。

uiID
[in]當使用者按鍵時要執行的命令標識元;或 (UINT)-1 表示未直接執行命令的功能表按鈕。

hMenu
[in]功能表的句柄;如果按鈕沒有功能表,則為 NULL。

iImage
[in]按鈕影像的索引;或 -1 如果此按鈕沒有圖示,或使用 uiID 所指定命令的圖示。 應用程式中每個 CMFCToolBarImages 物件的索引都相同。

lpszText
[in]工具列功能表按鈕的文字。

bUserButton
[in]如果按鈕顯示使用者定義的影像,則為TRUE;如果按鈕顯示與 uiID指定命令相關聯的預先定義影像,則為 FALSE。

備註

如果 uiID 是有效的命令標識碼,按鈕會在使用者按兩下命令時執行該命令。 如果 hMenu 是有效的功能表句柄,按鈕會在工具列中出現或出現在功能表中的子選單時,提供下拉功能表。 如果 uiIDhMenu有效,則按鈕是一個分割按鈕,其中部分會在使用者按兩下命令時執行命令,而部分的向下箭號會在使用者按下拉功能表。 不過,如果 hMenu 有效,當使用者將按鈕插入功能表時,將無法按下按鈕來執行命令。

範例

下列範例示範如何建構 類別的物件 CMFCToolBarMenuButton 。 此程式碼片段是 WordPad 範例的一部分。

CMFCToolBarMenuButton *pBorderType = new CMFCToolBarMenuButton(ID_BORDER_1, pPopup->GetSafeHmenu(),
                                                               GetCmdMgr()->GetCmdImage(ID_BORDER_1, FALSE),
                                                               _T("Borders"));

CMFCToolBarMenuButton::CompareWith

virtual BOOL CompareWith(const CMFCToolBarButton& other) const;

參數

[in] 其他

傳回值

備註

CMFCToolBarMenuButton::CopyFrom

virtual void CopyFrom(const CMFCToolBarButton& src);

參數

[in] src

備註

CMFCToolBarMenuButton::CreateFromMenu

從 Windows 功能表句柄初始化工具列選單。

virtual void CreateFromMenu(HMENU hMenu);

參數

hMenu
[in]功能表的句柄。

備註

工具列功能表按鈕可以顯示下拉式子功能表。

架構會呼叫此方法,以從功能表初始化子功能表中的命令。

CMFCToolBarMenuButton::CreateMenu

建立包含工具列功能表中命令的功能表。 傳回功能表的句柄。

virtual HMENU CreateMenu() const;

傳回值

如果成功,功能表的句柄。 如果與工具列功能表按鈕相關聯的命令清單是空的,則為NULL。

備註

您可以在衍生類別中覆寫此方法,以自定義功能表產生的方式。

CMFCToolBarMenuButton::CreatePopupMenu

CMFCPopupMenu建立物件以顯示工具列功能表。

virtual CMFCPopupMenu* CreatePopupMenu();

傳回值

物件的指標 CMFCPopupMenu ,顯示與工具欄功能表按鈕相關聯的下拉功能表。

備註

架構會呼叫這個方法,以準備與按鈕相關聯的下拉功能表顯示。

默認實作只會建構並傳回新的 CMFCPopupMenu 物件。 如果您想要使用 CMFCPopupMenu 類別衍生類型或執行其他初始化,請覆寫此方法。

CMFCToolBarMenuButton::D rawDocumentIcon

在功能表按鈕上繪製檔圖示。

void DrawDocumentIcon(
    CDC* pDC,
    const CRect& rectImage,
    HICON hIcon);

參數

pDC
[in]裝置內容的指標。

rectImage
[in]影像周框的座標。

hIcon
[in]圖示的句柄。

備註

此方法會採用文件圖示,並將它繪製在功能表按鈕上,中央位於 rectImage指定的區域中。

CMFCToolBarMenuButton::EnableQuickCustomize

void EnableQuickCustomize();

備註

CMFCToolBarMenuButton::HasButton

virtual BOOL HasButton() const;

傳回值

備註

CMFCToolBarMenuButton::HaveHotBorder

virtual BOOL HaveHotBorder() const;

傳回值

備註

CMFCToolBarMenuButton::IsBorder

virtual BOOL IsBorder() const;

傳回值

備註

CMFCToolBarMenuButton::IsClickedOnMenu

BOOL IsClickedOnMenu() const;

傳回值

備註

CMFCToolBarMenuButton::IsQuickMode

BOOL IsQuickMode();

傳回值

備註

CMFCToolBarMenuButton::GetCommands

提供工具列功能表中命令清單的唯讀存取權。

const CObList& GetCommands() const;

傳回值

CObList Class 物件的 const 參考,其中包含 CMFCToolBarButton 類別物件的集合

備註

工具列功能表按鈕可以顯示子選單。 您可以在建構函式的子功能表或 CMFCToolBarMenuButton::CreateFromMenu 中提供命令清單,做為功能表的句柄 (HMENU)。 功能表會轉換成衍生自 CMFCToolBarButton 類別 並儲存在內部 CObList 物件中的物件清單。 您可以呼叫此方法來存取此清單。

CMFCToolBarMenuButton::GetImageRect

擷取按鈕影像的周框。

void GetImageRect(CRect& rectImage);

參數

rectImage
[out]對象的參考 CRect ,這個物件會接收影像周框的座標。

CMFCToolBarMenuButton::GetPaletteRows

當功能表處於調色盤模式時,傳回下拉功能表中的數據列數目。

int GetPaletteRows() const;

傳回值

調色盤中的數據列數目。

備註

當功能表按鈕設定為調色盤模式時,功能表項會出現在只有有限數據列數目的多個數據行中。 呼叫此方法以取得數據列數目。 您可以啟用或停用調色盤模式,並使用CMFCToolBarMenuButton::SetMenuPaletteMode 指定數據列數目。

CMFCToolBarMenuButton::GetPopupMenu

會傳回代表按鈕下拉功能表之 CMFCPopupMenu Class 物件的指標。

CMFCPopupMenu* GetPopupMenu() const;

傳回值

CMFCPopupMenu Class 物件的指標,該物件是在架構繪製工具欄功能表按鈕的子功能表時建立的;如果未顯示子功能表,則為NULL。

備註

當工具列功能表按鈕顯示下拉功能表時,按鈕會 建立CMFCPopupMenu Class 物件來代表功能表。 呼叫這個方法以取得 物件的指標 CMFCPopupMenu 。 您不應該儲存傳回的指標,因為它是暫時的,當使用者關閉下拉功能表時會變成無效。

CMFCToolBarMenuButton::IsDroppedDown

指出目前是否顯示快顯功能表。

virtual BOOL IsDroppedDown() const;

傳回值

如果工具列功能表按鈕顯示其子功能表,則為TRUE;否則為 FALSE。

CMFCToolBarMenuButton::IsEmptyMenuAllowed

指定功能表項是否顯示空白子選單。

virtual BOOL IsEmptyMenuAllowed() const;

傳回值

如果架構從目前選取的功能表項開啟子功能表,即使子功能表是空的,則為TRUE;否則為 FALSE。

備註

當用戶嘗試從目前選取的功能表項開啟子功能表時,架構會呼叫此方法。 如果子功能表是空的,並 IsEmptyMenuAllowed 傳回 FALSE,則子功能表將不會開啟。

默認實作會傳回 FALSE。 覆寫此方法以自定義此行為。

CMFCToolBarMenuButton::IsExclusive

指出按鈕是否處於獨佔模式。

virtual BOOL IsExclusive() const;

傳回值

如果按鈕以獨佔模式運作,則為TRUE;否則為 FALSE。

備註

當使用者開啟按鈕的快捷功能表,然後將滑鼠指標移至另一個工具列或功能表按鈕上時,除非按鈕處於獨佔模式,否則快捷功能表會關閉。

默認實作一律會傳回 FALSE。 如果您想要開啟獨佔模式,請覆寫衍生類別中的這個方法。

CMFCToolBarMenuButton::IsMenuPaletteMode

判斷下拉功能表是否處於調色盤模式。

BOOL IsMenuPaletteMode() const;

傳回值

如果已啟用調色盤模式,則為TRUE,否則為 FALSE。

備註

當功能表按鈕設定為調色盤模式時,功能表項會出現在只有有限數據列數目的多個數據行中。 呼叫此方法以取得數據列數目。 您可以呼叫 CMFCToolBarMenuButton::SetMenuPaletteMode 來啟用或停用調色盤模式。

CMFCToolBarMenuButton::IsTearOffMenu

指出下拉功能表是否有卸除列。

virtual BOOL IsTearOffMenu() const;

傳回值

如果工具列功能表按鈕有卸除列,則為TRUE;否則為 FALSE。

備註

若要啟用卸除功能並設定卸除列標識符,請呼叫 CMFCToolBarMenuButton::SetTearOff

CMFCToolBarMenuButton::m_bAlwaysCallOwnerDraw

指定當繪製按鈕時,架構是否一律呼叫 CFrameWndEx::OnDrawMenuImage

static BOOL m_bAlwaysCallOwnerDraw;

備註

當這個成員變數設定為TRUE時,按鈕一律會呼叫 CFrameWndEx::OnDrawMenuImage 方法,以顯示按鈕上的影像。 當 為 FALSE 時 m_bAlwaysCallOwnerDraw ,如果預先定義影像,按鈕本身就會繪製影像。 否則,它會呼叫 OnDrawMenuImage

CMFCToolBarMenuButton::OnAfterCreatePopupMenu

virtual void OnAfterCreatePopupMenu();

備註

CMFCToolBarMenuButton::OnBeforeDrag

virtual BOOL OnBeforeDrag() const;

傳回值

備註

CMFCToolBarMenuButton::OnCalculateSize

virtual SIZE OnCalculateSize(
    CDC* pDC,
    const CSize& sizeDefault,
    BOOL bHorz);

參數

[in] pDC
[in] sizeDefault
[in] bHorz

傳回值

備註

CMFCToolBarMenuButton::OnCancelMode

virtual void OnCancelMode();

備註

CMFCToolBarMenuButton::OnChangeParentWnd

virtual void OnChangeParentWnd(CWnd* pWndParent);

參數

[in] pWndParent

備註

CMFCToolBarMenuButton::OnClick

virtual BOOL OnClick(
    CWnd* pWnd,
    BOOL bDelay = TRUE);

參數

[in] pWnd
[in] bDelay

傳回值

備註

CMFCToolBarMenuButton::OnClickMenuItem

當使用者在下拉功能表中選取專案時,由架構呼叫。

virtual BOOL OnClickMenuItem();

傳回值

如果架構應該繼續默認功能表項處理,則為 FALSE;否則為TRUE。 默認實作一律會傳回 FALSE。

備註

當使用者單擊功能表項時,架構會執行與該專案相關聯的命令。

若要自訂選單項處理,請在衍生自 CMFCToolBarMenuButton 類別的類別中覆寫 OnClickMenuItem 。 您也必須覆寫 CFrameWndEx::OnShowPopupMenu ,並以衍生類別的實例取代需要特殊處理的功能表按鈕。

CMFCToolBarMenuButton::OnContextHelp

virtual BOOL OnContextHelp(CWnd* pWnd);

參數

[in] pWnd

傳回值

備註

CMFCToolBarMenuButton::OnDraw

virtual void OnDraw(
    CDC* pDC,
    const CRect& rect,
    CMFCToolBarImages* pImages,
    BOOL bHorz = TRUE,
    BOOL bCustomizeMode = FALSE,
    BOOL bHighlight = FALSE,
    BOOL bDrawBorder = TRUE,
    BOOL bGrayDisabledButtons = TRUE);

參數

[in] pDC
[in] rect
[in] pImages
[in] bHorz
[in] bCustomizeMode
[in] bHighlight
[in] bDrawBorder
[in] bGrayDisabledButtons

備註

CMFCToolBarMenuButton::OnDrawOnCustomizeList

virtual int OnDrawOnCustomizeList(
    CDC* pDC,
    const CRect& rect,
    BOOL bSelected);

參數

[in] pDC
[in] rect
[in] bSelected

傳回值

備註

CMFCToolBarMenuButton::OpenPopupMenu

當用戶開啟工具列功能表按鈕的下拉功能表時,由架構呼叫。

virtual BOOL OpenPopupMenu(CWnd* pWnd=NULL);

參數

pWnd
[in]指定接收下拉功能表命令的視窗。 只有當工具列功能表按鈕具有父視窗時,它才能是NULL。

傳回值

TRUE 是表示 當 CMFCPopupMenu Class 物件建立並成功開啟時,則為 TRUE,否則為 FALSE。

備註

當使用者從工具列功能表按鈕開啟下拉功能表時,架構會呼叫此函式。

CMFCToolBarMenuButton::ResetImageToDefault

virtual void ResetImageToDefault();

備註

CMFCToolBarMenuButton::SaveBarState

virtual void SaveBarState();

備註

架構會在建立工具列按鈕做為拖放作業的結果時呼叫此方法。 這個方法會呼叫 最上層快捷功能表的CMFCPopupMenu::SaveState 方法,這會導致快捷功能表的父按鈕重新建立其功能表。

CMFCToolBarMenuButton::Serialize

virtual void Serialize(CArchive& ar);

參數

[in] ar

備註

CMFCToolBarMenuButton::SetACCData

設定功能區項目的協助工具資料。

virtual BOOL SetACCData(
    CWnd* pParent,
    CAccessibilityData& data);

參數

pParent
功能區項目的父視窗。

data
功能區項目的協助工具資料。

傳回值

一律會傳回 TRUE。

備註

根據預設,此方法會設定功能區項目的輔助功能數據,且一律會傳回 TRUE。 覆寫此方法以設定協助工具資料並傳回值,以指出成功或失敗。

CMFCToolBarMenuButton::SetMenuOnly

指定當按鈕同時具有有效的命令標識碼和子功能表時,是否繪製為功能表按鈕或分割按鈕。

void SetMenuOnly(BOOL bMenuOnly);

參數

bMenuOnly
[in]TRUE 表示當此按鈕同時具有有效的命令標識碼和子功能表時,將此按鈕顯示為功能表按鈕,FALSE 則當按鈕同時具有有效的命令標識元和子功能表時,則會將此按鈕顯示為分割按鈕。

備註

一般而言,當工具列功能表按鈕同時有子功能表和命令標識碼時,功能表會顯示為具有主按鈕和附加向下箭號按鈕的分割按鈕。 如果您呼叫此方法且 bMenuOnly 為 TRUE,按鈕會改為顯示為單一功能表按鈕,並在按鈕中有向下箭號。 當使用者在任一模式中按下箭號時,子選單就會開啟,當使用者在任一模式中按鍵的非箭號部分時,架構就會執行 命令 。

CMFCToolBarMenuButton::SetMenuPaletteMode

指定下拉功能表是否處於調色盤模式。

void SetMenuPaletteMode(
    BOOL bMenuPaletteMode=TRUE,
    int nPaletteRows=1);

參數

bMenuPaletteMode
[in]指定下拉功能表是否處於調色盤模式。

nPaletteRows
[in]調色盤中的數據列數目。

備註

在調色盤模式中,所有功能表項都會顯示為多欄調色盤。 您可以使用 nPaletteRows 來指定資料列數目。

CMFCToolBarMenuButton::SetMessageWnd

void SetMessageWnd(CWnd* pWndMessage);

參數

[in] pWndMessage

備註

CMFCToolBarMenuButton::SetRadio

設定工具列功能表按鈕,以在核取單選按鈕樣式圖示時顯示。

virtual void SetRadio();

備註

選取功能表按鈕時繪製時,會呼叫 CMFCVisualManager::OnDrawMenuCheck 來繪製複選標記圖示。 根據預設, OnDrawMenuCheck 要求目前的視覺效果管理員在功能表按鈕上繪製複選框樣式複選標記。 呼叫此方法之後,目前的可視化管理員會改為在功能表按鈕上繪製單選按鈕樣式複選標記。 這項變更無法復原。

當您呼叫此方法且功能表按鈕目前正在顯示時,將會重新整理。

CMFCToolBarMenuButton::SetTearOff

指定下拉功能表的卸除列標識碼。

virtual void SetTearOff(UINT uiBarID);

參數

uiBarID
[in]指定新的卸除列標識碼。

備註

呼叫這個方法,以指定當使用者將功能表按鈕從功能表欄拖曳至功能表欄時所建立的卸除列標識元。 如果 uiBarID 參數為 0,使用者就無法卸除功能表按鈕。

呼叫 CWinAppEx::EnableTearOffMenus ,以啟用應用程式中的卸除功能表功能。

另請參閱

階層架構圖表
類別
CMFCToolBarButton 類別
CMFCToolBar 類別
CMFCPopupMenu 類別