Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln beskrivs hur du lägger till en verktygsfältsknapp som innehåller en Windows-kontroll i ett verktygsfält. I MFC måste en verktygsfältsknapp vara en CMFCToolBarButtonklass-härledd klass, till exempel CMFCToolBarComboBoxButton Klass, CMFCToolBarEditBoxButton Klass, CMFCDropDownToolbarButton Klass eller CMFCToolBarMenuButton Klass.
Lägga till kontroller i verktygsfält
Följ dessa steg om du vill lägga till en kontroll i ett verktygsfält:
Reservera ett dummy-resurs-ID för knappen i den överordnade verktygsfältsresursen. Mer information om hur du skapar knappar med verktygsfältsredigeraren i Visual Studio finns i artikeln Verktygsfältsredigerare .
Reservera en verktygsfältsbild (knappikon) för knappen i alla bitmappar i det överordnade verktygsfältet.
Gör följande i meddelandehanteraren som bearbetar
AFX_WM_RESETTOOLBARmeddelandet:Konstruera knappkontrollen med hjälp av en
CMFCToolbarButton-derived-klass.Ersätt dummy-knappen med den nya kontrollen med hjälp av
CMFCToolBar::ReplaceButton. Du kan skapa knappobjektet i stacken eftersomReplaceButtonkopierar knappobjektet och underhåller kopian.
Anmärkning
Om du har aktiverat anpassning i programmet kan du behöva återställa verktygsfältet med hjälp av knappen Återställ på fliken Verktygsfält i dialogrutan Anpassa för att se den uppdaterade kontrollen i programmet efter omkompileringen. Verktygsfältstillståndet sparas i Windows-registret och registerinformationen läses in och tillämpas när ReplaceButton metoden körs under programstarten.
Verktygsfältskontroller och anpassning
Fliken Kommandon i dialogrutan Anpassa innehåller en lista över kommandon som är tillgängliga i programmet. Som standard bearbetar dialogrutan Anpassa programmenyerna och skapar en lista med standardknappar i verktygsfältet i varje menykategori. Om du vill behålla de utökade funktioner som verktygsfältskontrollerna tillhandahåller måste du ersätta standardverktygsknappen med den anpassade kontrollen i dialogrutan Anpassa .
När du aktiverar anpassning skapar du dialogrutan Anpassa i anpassningshanteraren OnViewCustomize med klassen CMFCToolBarsCustomizeDialog Klass . Innan du visar dialogrutan Anpassa genom att anropa CMFCToolBarsCustomizeDialog::Createanropar du CMFCToolBarsCustomizeDialog::ReplaceButton för att ersätta standardknappen med den nya kontrollen.
Exempel: Skapa en sökkombinationsruta
I det här avsnittet beskrivs hur du skapar en sökkombinationsrutekontroll som visas i ett verktygsfält och innehåller söksträngar som använts nyligen. Användaren kan skriva en sträng i kontrollen och sedan trycka på returnyckeln för att söka i ett dokument, eller trycka på escape-tangenten för att återgå till huvudramen. Det här exemplet förutsätter att dokumentet visas i en CEditViewklass-härledd vy.
Skapa sökkontrollen
Skapa först kombinationsrutekontrollen Hitta:
Lägg till knappen och dess kommandon i programresurserna:
I programresurserna lägger du till en ny knapp med ett kommando-ID
ID_EDIT_FINDi ett verktygsfält i ditt program och till eventuella bitmappar som är associerade med verktygsfältet.Skapa ett nytt menyalternativ med kommandots ID
ID_EDIT_FIND.Lägg till en ny sträng
"Find the text\nFind"i strängtabellen och tilldela den ettID_EDIT_FIND_COMBOkommando-ID. Det här ID:t används som kommando-ID för knappen Sök kombinationsruta.Anmärkning
Eftersom
ID_EDIT_FINDär ett standardkommando som bearbetas avCEditViewbehöver du inte implementera en särskild hanterare för det här kommandot. Du måste dock implementera en hanterare för det nya kommandotID_EDIT_FIND_COMBO.
Skapa en ny klass,
CFindComboBox, härledd frånCComboBoxklass.CFindComboBoxI klassen åsidosätter du denPreTranslateMessagevirtuella metoden. Med den här metoden kan kombinationsrutan bearbetaWM_KEYDOWNmeddelandet. Om användaren träffar escape-nyckeln (VK_ESCAPE) returnerar du fokus till huvudramsfönstret. Om användaren träffar returnyckeln (VK_ENTER) skickar du ettWM_COMMANDmeddelande till huvudramsfönstret som innehållerID_EDIT_FIND_COMBOkommando-ID:t.Skapa en klass för knappen Sök kombinationsruta, härledd från
CMFCToolBarComboBoxButtonklass. I det här exemplet heterCFindComboButtondet .Konstruktorn
CMFCToolbarComboBoxButtonför tar tre parametrar: knappens kommando-ID, knappbildindexet och kombinationsrutans format. Ange följande parametrar:Skicka
ID_EDIT_FIND_COMBOsom kommando-ID.Använd
CCommandManager::GetCmdImagemedID_EDIT_FINDför att hämta avbildningsindexet.En lista över tillgängliga kombinationsruteformat finns iCombo-Box Formatmallar.
Åsidosätt metoden
CFindComboButtoni klassenCMFCToolbarComboBoxButton::CreateCombo. Här bör du skapaCFindComboButtonobjektet och returnera en pekare till det.Använd makrot
IMPLEMENT_SERIALför att göra kombinationsknappen beständig. Arbetsytehanteraren läser automatiskt in och sparar knappens tillstånd i Windows-registret.Implementera
ID_EDIT_FIND_COMBO-hanteraren i dokumentvyn. AnvändCMFCToolBar::GetCommandButtonsmedID_EDIT_FIND_COMBOför att hämta alla Find kombinationslådeknappar. Det kan finnas flera kopior av en knapp med samma kommando-ID på grund av anpassning.ID_EDIT_FINDI meddelandehanterarenOnFindanvänder duCMFCToolBar::IsLastCommandFromButtonför att avgöra om kommandot find skickades från knappen Sök kombinationsruta. I så fall letar du upp texten och lägger till söksträngen i kombinationsrutan.
Lägga till sökkontrollen i huvudverktygsfältet
Följ dessa steg för att lägga till kombinationsrutan i verktygsfältet:
AFX_WM_RESETTOOLBARImplementera meddelandehanterarenOnToolbarReseti huvudramfönstret.Anmärkning
Ramverket skickar det här meddelandet till huvudramfönstret när ett verktygsfält initieras under programstarten eller när ett verktygsfält återställs under anpassningen. I båda fallen måste du ersätta standardverktygsknappen med den anpassade knappen Sök kombinationsruta.
I
AFX_WM_RESETTOOLBAR-hanteraren granskar du verktygsfälts-ID:t, det vill sägaWPARAMavAFX_WM_RESETTOOLBAR-meddelandet. Om verktygsfälts-ID:t är lika med verktygsfältet som innehåller knappen Sök kombinationsruta anropar duCMFCToolBar::ReplaceButtonför att ersätta knappen Sök (det vill säga knappen med kommando-IDID_EDIT_FIND) med ettCFindComboButtonobjekt.Anmärkning
Du kan skapa ett
CFindComboBoxobjekt i stacken eftersomReplaceButtonkopierar knappobjektet och underhåller kopian.
Lägga till sökkontrollen i dialogrutan Anpassa
I anpassningshanteraren OnViewCustomizeanropar du CMFCToolBarsCustomizeDialog::ReplaceButton för att ersätta knappen Sök (det vill säga knappen med kommando-ID ID_EDIT_FIND) med ett CFindComboButton objekt.
Se även
hierarkidiagram
klasser
CMFCToolBar klass
CMFCToolBarButton klass
CMFCToolBarComboBoxButton klass
CMFCToolBarsCustomizeDialog klass