Návod: Umístění ovládacích prvků na panely nástrojů
Tento článek popisuje, jak přidat tlačítko panelu nástrojů, které obsahuje ovládací prvek Windows na panel nástrojů. V prostředí MFC musí být tlačítko panelu nástrojů CMFCToolBarButton Třídy odvozené třídy, například CMFCToolBarComboBoxButton Třída, CMFCToolBarEditBoxButton Třída, CMFCDropDownToolbarButton Třída nebo CMFCToolBarMenuButton Třída.
Přidávání ovládacích prvků na panely nástrojů
Chcete-li přidat ovládací prvek na panel nástrojů, postupujte takto:
Zarezervujte si pro tlačítko zástupný identifikátor ID prostředku v nadřazeném prostředku panelu nástrojů. Další informace o vytváření tlačítek pomocí editoru nástrojů v sadě Visual Studio naleznete v článku Editor panelu nástrojů.
Zarezervujte obrázek panelu nástrojů (ikonu tlačítka) pro tlačítko ve všech rastrových obrázcích nadřazeného panelu nástrojů.
V obslužné rutině zprávy, která zprávu zpracuje
AFX_WM_RESETTOOLBAR
, proveďte následující kroky:Vytvořte ovládací prvek tlačítka pomocí odvozené třídy
CMFCToolbarButton
.Nahraďte fiktivní tlačítko novým ovládacím prvku pomocí CMFCToolBar::ReplaceButton. Objekt tlačítka lze vytvořit v zásobníku, protože funkce
ReplaceButton
zkopíruje objekt tlačítka a tuto kopii udržuje.
Poznámka
Pokud jste v aplikaci povolili přizpůsobení, bude pravděpodobně nutné obnovit panel nástrojů pomocí tlačítka Obnovit na kartě Panely nástrojů dialogového okna Přizpůsobit , aby se po opětovném zkompilování zobrazil aktualizovaný ovládací prvek v aplikaci. Stav panelu nástrojů je uložen v registru systému Windows, přičemž informace registru jsou načítány a použity po spuštění metody ReplaceButton
při spouštění aplikace.
Ovládací prvky a přizpůsobení panelu nástrojů
Karta Příkazy v dialogovém okně Přizpůsobit obsahuje seznam příkazů, které jsou v aplikaci k dispozici. Ve výchozím nastavení dialogové okno Přizpůsobit zpracuje nabídky aplikace a vytvoří seznam standardních tlačítek panelu nástrojů v každé kategorii nabídek. Chcete-li zachovat rozšířené funkce, které ovládací prvky panelu nástrojů poskytují, je nutné nahradit standardní tlačítko panelu nástrojů vlastním ovládacím prvku v dialogovém okně Přizpůsobit .
Když povolíte přizpůsobení, vytvoříte dialogové okno Přizpůsobit v obslužné rutině OnViewCustomize
přizpůsobení pomocí CMFCToolBarsCustomizeDialog třída . Před zobrazením dialogového okna Přizpůsobit voláním CMFCToolBarsCustomizeDialog::Create, zavolejte CMFCToolBarsCustomizeDialog::ReplaceButton nahradit standardní tlačítko novým ovládacím prvku.
Příklad: Vytvoření pole se seznamem Find
Tato část popisuje, jak vytvořit ovládací prvek Pole se seznamem Najít , který se zobrazí na panelu nástrojů a obsahuje nedávno použité vyhledávací řetězce. Uživatel může do ovládacího prvku zadat řetězec a stisknutím klávesy Enter prohledat dokument, nebo stisknout klávesu Escape a vrátit fokus na hlavní rámec. Tento příklad předpokládá, že dokument je zobrazen v CEditView Třídy odvozené zobrazení.
Vytvoření ovládacího prvku Find
Nejprve vytvořte ovládací prvek Najít pole se seznamem:
Přidejte tlačítko a jeho příkazy do prostředků aplikace:
V prostředcích aplikace přidejte na panel nástrojů v aplikaci a ke všem rastrovým obrázkům přidruženým k panelu nástrojů nové tlačítko s identifikátorem příkazu
ID_EDIT_FIND
.Vytvořte novou položku nabídky s
ID_EDIT_FIND
ID příkazu.Do tabulky řetězců přidejte nový řetězec „Najít text\nNajít“ a přiřaďte k němu identifikátor příkazu
ID_EDIT_FIND_COMBO
. Toto ID se použije jako ID příkazu tlačítka pole se seznamem Najít .Poznámka
Jelikož příkaz
ID_EDIT_FIND
je standardní příkaz zpracovávaný třídouCEditView
, není nutné implementovat pro něj zvláštní obslužnou rutinu. Obslužnou rutinu je však zapotřebí implementovat pro nový příkazID_EDIT_FIND_COMBO
.
Vytvořte novou třídu odvozenou
CFindComboBox
z CComboBox Class.Ve třídě
CFindComboBox
přepište virtuální metoduPreTranslateMessage
. Tato metoda umožní poli se seznamem zpracovat WM_KEYDOWN zprávu. Stiskne-li uživatel klávesu Escape (VK_ESCAPE
), vraťte fokus na okno hlavního rámce. Stiskne-li uživatel klávesu Enter (VK_ENTER
), zašlete oknu hlavního rámce zprávuWM_COMMAND
obsahující identifikátor příkazuID_EDIT_FIND_COMBO
.Vytvořte třídu pro tlačítko Pole se seznamem Najít odvozené z CMFCToolBarComboBoxButton Třída. V tomto příkladu se jmenuje
CFindComboButton
.Konstruktor třídy
CMFCToolbarComboBoxButton
přijímá tři parametry: identifikátor příkazu tlačítka, index obrázku tlačítka a styl pole se seznamem. Tyto parametry nastavte takto:Jako identifikátor příkazu předejte hodnotu
ID_EDIT_FIND_COMBO
.K získání indexu image použijte CCommandManager::GetCmdImage
ID_EDIT_FIND
.Seznam dostupných stylů polí se seznamem najdete v tématu Styly pole se seznamem.
Ve třídě
CFindComboButton
přepište metoduCMFCToolbarComboBoxButton::CreateCombo
. Zde by měl být vytvořen objektCFindComboButton
a vrácen ukazatel na něj.Pomocí IMPLEMENT_SERIAL makra vytvořte trvalé tlačítko se seznamem. Správce pracovního prostoru automaticky načte a uloží stav tlačítka v registru systému Windows.
V aktuálním zobrazení dokumentu implementujte obslužnou rutinu příkazu
ID_EDIT_FIND_COMBO
. Pomocí CMFCToolBar::GetCommandButtons s načíst všechna tlačítka pole se seznamemID_EDIT_FIND_COMBO
Najít. V důsledku přizpůsobení může existovat několik kopií tlačítka se stejným identifikátorem příkazu.V obslužné rutině
OnFind
ID_EDIT_FIND
zprávy použijte CMFCToolBar::IsLastCommandFromButton k určení, zda byl příkaz najít odeslán z tlačítka pole se seznamem Najít. Pokud ano, vyhledejte text a přidejte vyhledávací řetězec do pole se seznamem.
Přidání ovládacího prvku Find na hlavní panel nástrojů
Chcete-li přidat tlačítko pole se seznamem na panel nástrojů, postupujte takto:
V hlavním okně rámce implementujte popisovač zprávy
AFX_WM_RESETTOOLBAR
OnToolbarReset
.Poznámka
Rozhraní pošle tuto zprávu hlavnímu oknu rámce ve chvíli, kdy je panel nástrojů inicializován během spuštění aplikace, nebo kdy je panel nástrojů obnoven během přizpůsobení. V obou případech musíte standardní tlačítko panelu nástrojů nahradit vlastním tlačítkem pole se seznamem Najít .
V obslužné rutině
AFX_WM_RESETTOOLBAR
zkontrolujte ID panelu nástrojů, tj. WPARAM zprávy AFX_WM_RESETTOOLBAR. Pokud je ID panelu nástrojů stejné jako u panelu nástrojů, který obsahuje tlačítko pole se seznamem Najít, zavolejte CMFCToolBar::ReplaceButton nahradit tlačítko Najít (to znamená, že tlačítko s IDID_EDIT_FIND)
příkazu objektuCFindComboButton
.Poznámka
Objekt
CFindComboBox
lze vytvořit v zásobníku, protože funkceReplaceButton
zkopíruje objekt tlačítka a tuto kopii udržuje.
Přidání ovládacího prvku Find do dialogového okna Přizpůsobit
V obslužné rutině OnViewCustomize
přizpůsobení zavolejte CMFCToolBarsCustomizeDialog::ReplaceButton nahradit tlačítko Najít (to znamená tlačítko s ID ID_EDIT_FIND
příkazu ) objektem CFindComboButton
.
Viz také
Graf hierarchie
Třídy
CMFCToolBar – třída
CMFCToolBarButton – třída
CMFCToolBarComboBoxButton – třída
CMFCToolBarsCustomizeDialog – třída