CMFCToolBarMenuButton 類別
包含快顯功能表的工具列按鈕。 如需更多詳細資料,請參閱 Visual Studio 安裝位置下之 VC\atlmfc\src\mfc 資料夾中的原始程式碼。
語法
class CMFCToolBarMenuButton : public CMFCToolBarButton
成員
公用建構函式
名稱 | 描述 |
---|---|
CMFCToolBarMenuButton::CMFCToolBarMenuButton | 建構 CMFCToolBarMenuButton 物件。 |
公用方法
受保護的方法
名稱 | 描述 |
---|---|
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);
繼承階層架構
需求
標頭: 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] 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 類別