共用方式為


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 是有效的功能表控制碼,按鈕會在工具列中出現或出現在功能表中的子功能表時,提供下拉式功能表。 如果 uiID hMenu 有效,則按鈕是一個分割按鈕,其中部分會在使用者按一下命令時執行命令,而部分的向下箭號會在使用者按一下時下拉式功能表。 不過,如果 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] 矩形
[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] 矩形
[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 類別