CSplitButton – třída
Třída CSplitButton
představuje ovládací prvek rozděleného tlačítka. Ovládací prvek rozdělit tlačítko provádí výchozí chování, když uživatel klikne na hlavní část tlačítka a zobrazí rozevírací nabídku, když uživatel klikne na šipku rozevíracího seznamu tlačítka.
Syntaxe
class CSplitButton : public CButton
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CSplitButton::CSplitButton | CSplitButton Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CSplitButton::Create | Vytvoří ovládací prvek rozděleného tlačítka se zadanými styly a připojí ho k aktuálnímu CSplitButton objektu. |
CSplitButton::SetDropDownMenu | Nastaví rozevírací nabídku, která se zobrazí, když uživatel klikne na šipku rozevíracího seznamu aktuálního ovládacího prvku rozděleného tlačítka. |
Chráněné metody
Název | Popis |
---|---|
CSplitButton::OnDropDown | Zpracovává BCN_DROPDOWN oznámení, že systém odesílá, když uživatel klikne na šipku rozevíracího seznamu aktuálního ovládacího prvku rozděleného tlačítka. |
Poznámky
Třída CSplitButton
je odvozena z CButton třídy. Ovládací prvek split button je ovládací prvek tlačítka, jehož styl je BS_SPLITBUTTON. Když uživatel klikne na šipku rozevíracího seznamu, zobrazí se vlastní nabídka. Další informace najdete v části BS_SPLITBUTTON a styly BS_DEFSPLITBUTTON v části Styly tlačítek.
Následující obrázek znázorňuje dialogové okno, které obsahuje ovládací prvek pager a ovládací prvek rozděleného tlačítka (1). Na šipku rozevíracího seznamu (2) už jste klikli a zobrazí se podnabídka (3).
Hierarchie dědičnosti
CSplitButton
Požadavky
Hlavička: afxcmn.h
Tato třída je podporována v systému Windows Vista a novějších verzích.
Další požadavky pro tuto třídu jsou popsány v části Požadavky na sestavení pro běžné ovládací prvky systému Windows Vista.
CSplitButton::Create
Vytvoří ovládací prvek rozděleného tlačítka se zadanými styly a připojí ho k aktuálnímu CSplitButton
objektu.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parametry
dwStyle
[v] Bitové kombinace (OR) stylů, které se mají použít u ovládacího prvku. Další informace naleznete v tématu Styly tlačítek.
Rect
[v] Odkaz na strukturu RECT , která obsahuje pozici a velikost ovládacího prvku.
pParentWnd
[v] Nenulový ukazatel na objekt CWnd , který je nadřazeným oknem ovládacího prvku.
Nid
[v] ID ovládacího prvku.
Návratová hodnota
TRUE, pokud tato metoda je úspěšná; jinak NEPRAVDA.
CSplitButton::CSplitButton
CSplitButton
Vytvoří objekt. Parametry konstruktoru určují podnabídku, která se zobrazí, když uživatel klikne na šipku rozevíracího seznamu ovládacího prvku rozděleného tlačítka.
CSplitButton();
CSplitButton(
UINT nMenuId,
UINT nSubMenuId)
CSplitButton(CMenu* pMenu)
Parametry
nNabídka
[v] ID prostředku řádku nabídek.
nSubMenuId
[v] ID prostředku podnabídky
pMenu
[v] Ukazatel na objekt CMenu , který určuje podnabídku. Objekt CSplitButton
odstraní CMenu
objekt a jeho přidružené HMENU, když CSplitButton
objekt zmizí z oboru.
Poznámky
Pomocí CSplitButton::Create metoda vytvořit rozdělené tlačítko ovládací prvek a připojit ho k objektuCSplitButton
.
CSplitButton::OnDropDown
Zpracovává BCN_DROPDOWN oznámení, že systém odesílá, když uživatel klikne na šipku rozevíracího seznamu aktuálního ovládacího prvku rozděleného tlačítka.
afx_msg void OnDropDown(
NMHDR* pNMHDR,
LRESULT* pResult);
Parametry
pNMHDR
[v] Ukazatel na strukturu NMHDR , která obsahuje informace o oznámení BCN_DROPDOWN .
pResult
[ven] (Nepoužívá se; není vrácena žádná hodnota.) Návratová hodnota oznámení BCN_DROPDOWN .
Poznámky
Když uživatel klikne na šipku rozevíracího seznamu ovládacího prvku rozděleného tlačítka, systém odešle BCN_DROPDOWN zprávu s oznámením, kterou OnDropDown
metoda zpracovává. CSplitButton
Objekt však nepředá oznámení BCN_DROPDOWN ovládacímu prvku, který obsahuje ovládací prvek rozděleného tlačítka. V důsledku toho ovládací prvek obsahující nemůže podporovat vlastní akci v reakci na oznámení.
Chcete-li implementovat vlastní akci, která obsahuje ovládací prvek podporuje, použijte objekt CButton se stylem BS_SPLITBUTTON místo objektu CSplitButton
. Pak implementujte obslužnou rutinu pro oznámení BCN_DROPDOWN v objektu CButton
. Další informace naleznete v tématu Styly tlačítek.
Pokud chcete implementovat vlastní akci, kterou samotný ovládací prvek rozděleného tlačítka podporuje, použijte reflexi zprávy. Odvozujte vlastní třídu z CSplitButton
třídy a pojmenujte ji, například CMySplitButton. Pak do aplikace přidejte následující mapu zpráv pro zpracování BCN_DROPDOWN oznámení:
BEGIN_MESSAGE_MAP(CMySplitButton,
CSplitButton)
ON_NOTIFY_REFLECT(BCN_DROPDOWN, &CMySplitButton::OnDropDown)
END_MESSAGE_MAP()
CSplitButton::SetDropDownMenu
Nastaví rozevírací nabídku, která se zobrazí, když uživatel klikne na šipku rozevíracího seznamu aktuálního ovládacího prvku rozděleného tlačítka.
void SetDropDownMenu(
UINT nMenuId,
UINT nSubMenuId);
void SetDropDownMenu(CMenu* pMenu);
Parametry
nNabídka
[v] ID prostředku řádku nabídek.
nSubMenuId
[v] ID prostředku podnabídky
pMenu
[v] Ukazatel na objekt CMenu , který určuje podnabídku. Objekt CSplitButton
odstraní CMenu
objekt a jeho přidružené HMENU, když CSplitButton
objekt zmizí z oboru.
Poznámky
Parametr nMenuId identifikuje řádek nabídek, což je vodorovný seznam položek řádku nabídek. Parametr nSubMenuId je číslo indexu založené na nule, které identifikuje podnabídku, což je rozevírací seznam položek nabídky přidružených ke každé položce řádku nabídek. Typická aplikace má například nabídku, která obsahuje položky řádku nabídek, Soubor, Úpravy a Nápověda. Položka řádku nabídek "Soubor" obsahuje podnabídku, která obsahuje položky nabídky" "Otevřít", "Zavřít" a "Ukončit". Když kliknete na šipku rozevíracího seznamu ovládacího prvku split-button, ovládací prvek zobrazí zadanou podnabídku, nikoli řádek nabídek.
Následující obrázek znázorňuje dialogové okno, které obsahuje ovládací prvek pager a ovládací prvek rozděleného tlačítka (1). Na šipku rozevíracího seznamu (2) už jste klikli a zobrazí se podnabídka (3).
Příklad
První příkaz v následujícím příkladu kódu ukazuje CSplitButton::SetDropDownMenu metoda. Vytvořili jsme nabídku pomocí editoru prostředků sady Visual Studio, který automaticky pojmenoval ID řádku nabídek IDR_MENU1. Parametr nSubMenuId , který je nula, odkazuje na jediný podnabídku řádku nabídek.
// 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);