CSplitButton 類別
類別 CSplitButton
代表分割按鈕控制件。 當使用者按一下按鈕的主要部分時,分割按鈕控制項會執行預設行為,而當使用者按一下按鈕的下拉箭號時,則顯示下拉式功能表。
語法
class CSplitButton : public CButton
成員
公用建構函式
名稱 | 描述 |
---|---|
CSplitButton::CSplitButton | 建構 CSplitButton 物件。 |
公用方法
名稱 | 描述 |
---|---|
CSplitButton::Create | 使用指定的樣式建立分割按鈕控件,並將它附加至目前的 CSplitButton 物件。 |
CSplitButton::SetDropDownMenu | 設定當使用者單擊目前分割按鈕控制件的下拉式箭號時所顯示的下拉功能表。 |
受保護的方法
名稱 | 描述 |
---|---|
CSplitButton::OnDropDown | 處理當使用者按兩下目前分割按鈕控制件的下拉箭號時,系統傳送的BCN_DROPDOWN通知。 |
備註
類別 CSplitButton
衍生自 CButton 類別。 分割按鈕控制件是BS_SPLITBUTTON樣式的按鈕控制件。 當使用者按下拉式箭號時,它會顯示自定義功能表。 如需詳細資訊,請參閱按鈕樣式中的 BS_SPLITBUTTON和BS_DEFSPLITBUTTON樣式。
下圖描述包含呼叫器控制項和 (1) 分割按鈕控制件的對話框。 已經單擊 [2] 下拉式箭號,並顯示 [3] 子功能表。
繼承階層架構
CSplitButton
需求
標頭: afxcmn.h
Windows Vista 和更新版本中支援此類別。
此類別的其他需求會在 Windows Vista 通用控件的組建需求中說明。
CSplitButton::Create
使用指定的樣式建立分割按鈕控件,並將它附加至目前的 CSplitButton
物件。
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
參數
dwStyle
[in]要套用至控制元件的樣式位元組合 (OR) 。 如需詳細資訊,請參閱 按鈕樣式。
rect
[in]RECT 結構的參考,其中包含控制項的位置和大小。
pParentWnd
[in]屬於控件父視窗之 CWnd 物件的非 Null 指標。
nID
[in]控件的標識碼。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
CSplitButton::CSplitButton
建構 CSplitButton
物件。 建構函式的參數會指定當使用者單擊分割按鈕控件下拉箭號時所顯示的子功能表。
CSplitButton();
CSplitButton(
UINT nMenuId,
UINT nSubMenuId)
CSplitButton(CMenu* pMenu)
參數
nMenuId
[in]功能表欄的資源標識碼。
nSubMenuId
[in]子功能表的資源標識碼。
pMenu
[in]指定子功能表之 CMenu 物件的指標。 物件CSplitButton
會在物件超出範圍時CSplitButton
,刪除CMenu
物件及其相關聯的 HMENU。
備註
使用 CSplitButton::Create 方法來建立分割按鈕控件,並將它附加至 CSplitButton
物件。
CSplitButton::OnDropDown
處理當使用者按兩下目前分割按鈕控制件的下拉箭號時,系統傳送的BCN_DROPDOWN通知。
afx_msg void OnDropDown(
NMHDR* pNMHDR,
LRESULT* pResult);
參數
pNMHDR
[in]NMHDR 結構的指標,其中包含BCN_DROPDOWN通知的相關信息。
pResult
[out](未使用;未傳回任何值。傳回BCN_DROPDOWN通知的值。
備註
當使用者按下分割按鈕控制件上的下拉式箭號時,系統會傳送BCN_DROPDOWN通知訊息,此方法會 OnDropDown
處理該訊息。 不過,物件不會將 CSplitButton
BCN_DROPDOWN通知轉送至包含分割按鈕控件的控件。 因此,包含的控件無法支援自定義動作來回應通知。
若要實作包含控制項支援的自定義動作,請使用 具有BS_SPLITBUTTON樣式的 CButton 物件,而不是 CSplitButton
物件。 然後實作 物件中BCN_DROPDOWN通知的 CButton
處理程式。 如需詳細資訊,請參閱 按鈕樣式。
若要實作分割按鈕控件本身支援的自定義動作,請使用 訊息反映。 從 CSplitButton
類別衍生您自己的類別,並將其命名為 CMySplitButton。 然後將下列訊息對應新增至您的應用程式,以處理BCN_DROPDOWN通知:
BEGIN_MESSAGE_MAP(CMySplitButton,
CSplitButton)
ON_NOTIFY_REFLECT(BCN_DROPDOWN, &CMySplitButton::OnDropDown)
END_MESSAGE_MAP()
CSplitButton::SetDropDownMenu
設定當使用者單擊目前分割按鈕控制件的下拉式箭號時所顯示的下拉功能表。
void SetDropDownMenu(
UINT nMenuId,
UINT nSubMenuId);
void SetDropDownMenu(CMenu* pMenu);
參數
nMenuId
[in]功能表欄的資源標識碼。
nSubMenuId
[in]子功能表的資源標識碼。
pMenu
[in] 指定子功能表之 CMenu 物件的指標。 物件CSplitButton
會在物件超出範圍時CSplitButton
,刪除CMenu
物件及其相關聯的 HMENU。
備註
nMenuId 參數會識別功能表欄,這是功能表欄項目的水平清單。 nSubMenuId 參數是以零起始的索引編號,可識別子功能表,這是與每個功能表欄專案相關聯的功能表項下拉式清單。 例如,一般應用程式具有包含功能表欄專案的功能表、[檔案]、[編輯] 和 [說明]。“File” 功能表欄專案有一個子功能表,其中包含功能表項 “Open”、“Close” 和 “Exit”。單擊分割按鈕控件的下拉式箭號時,控件會顯示指定的子功能表,而不是功能表欄。
下圖描述包含呼叫器控制項和 (1) 分割按鈕控制件的對話框。 已經單擊 [2] 下拉式箭號,並顯示 [3] 子功能表。
範例
下列程式代碼範例中的第一個語句示範 CSplitButton::SetDropDownMenu 方法。 我們已使用 Visual Studio 資源編輯器建立功能表,該編輯器會自動命名功能表欄標識碼,IDR_MENU1。 nSubMenuId 參數,其為零,是指功能表欄的唯一子功能表。
// Initialize the dropdown menu of the splitbutton control.
m_splitButton.SetDropDownMenu(IDR_MENU1, 0);
// Create the pager control.
BOOL nRet;
CRect rect;
GetClientRect(&rect);
nRet = m_pager.Create(
(WS_VISIBLE | WS_CHILD | PGS_HORZ),
CRect(rect.Width() / 4, 5, (rect.Width() * 3) / 4, 55),
this,
IDC_PAGER1);
m_pager.GetClientRect(&rect);
nRet = m_button.Create(
_T("This is a very, very long button. 012345678901234567890"),
(WS_VISIBLE | WS_CHILD), // Do not use CCS_NORESIZE.
CRect(0, 0, rect.Width(), 30),
&m_pager, IDC_BUTTON1);
m_pager.SetChild(m_button.m_hWnd);
m_pager.SetButtonSize(20);
m_pager.SetBorder(1);