Dela via


Genomgång: Sätta kontroller i verktygsfält

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:

  1. 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 .

  2. Reservera en verktygsfältsbild (knappikon) för knappen i alla bitmappar i det överordnade verktygsfältet.

  3. Gör följande i meddelandehanteraren som bearbetar AFX_WM_RESETTOOLBAR meddelandet:

    1. Konstruera knappkontrollen med hjälp av en CMFCToolbarButton-derived-klass.

    2. Ersätt dummy-knappen med den nya kontrollen med hjälp av CMFCToolBar::ReplaceButton. Du kan skapa knappobjektet i stacken eftersom ReplaceButton kopierar 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:

  1. Lägg till knappen och dess kommandon i programresurserna:

    1. I programresurserna lägger du till en ny knapp med ett kommando-ID ID_EDIT_FIND i ett verktygsfält i ditt program och till eventuella bitmappar som är associerade med verktygsfältet.

    2. Skapa ett nytt menyalternativ med kommandots ID ID_EDIT_FIND.

    3. Lägg till en ny sträng "Find the text\nFind" i strängtabellen och tilldela den ett ID_EDIT_FIND_COMBO kommando-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 av CEditViewbehö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 kommandot ID_EDIT_FIND_COMBO.

  2. Skapa en ny klass, CFindComboBox, härledd från CComboBox klass.

  3. CFindComboBox I klassen åsidosätter du den PreTranslateMessage virtuella metoden. Med den här metoden kan kombinationsrutan bearbeta WM_KEYDOWN meddelandet. 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 ett WM_COMMAND meddelande till huvudramsfönstret som innehåller ID_EDIT_FIND_COMBO kommando-ID:t.

  4. Skapa en klass för knappen Sök kombinationsruta, härledd från CMFCToolBarComboBoxButton klass. I det här exemplet heter CFindComboButtondet .

  5. Konstruktorn CMFCToolbarComboBoxButton för tar tre parametrar: knappens kommando-ID, knappbildindexet och kombinationsrutans format. Ange följande parametrar:

    1. Skicka ID_EDIT_FIND_COMBO som kommando-ID.

    2. Använd CCommandManager::GetCmdImage med ID_EDIT_FIND för att hämta avbildningsindexet.

    3. En lista över tillgängliga kombinationsruteformat finns iCombo-Box Formatmallar.

  6. Åsidosätt metoden CFindComboButton i klassen CMFCToolbarComboBoxButton::CreateCombo. Här bör du skapa CFindComboButton objektet och returnera en pekare till det.

  7. Använd makrot IMPLEMENT_SERIAL för att göra kombinationsknappen beständig. Arbetsytehanteraren läser automatiskt in och sparar knappens tillstånd i Windows-registret.

  8. Implementera ID_EDIT_FIND_COMBO-hanteraren i dokumentvyn. Använd CMFCToolBar::GetCommandButtons med ID_EDIT_FIND_COMBO för att hämta alla Find kombinationslådeknappar. Det kan finnas flera kopior av en knapp med samma kommando-ID på grund av anpassning.

  9. ID_EDIT_FIND I meddelandehanteraren OnFindanvänder du CMFCToolBar::IsLastCommandFromButton fö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:

  1. AFX_WM_RESETTOOLBAR Implementera meddelandehanteraren OnToolbarReset i 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.

  2. I AFX_WM_RESETTOOLBAR-hanteraren granskar du verktygsfälts-ID:t, det vill säga WPARAM av AFX_WM_RESETTOOLBAR-meddelandet. Om verktygsfälts-ID:t är lika med verktygsfältet som innehåller knappen Sök kombinationsruta anropar du CMFCToolBar::ReplaceButton för att ersätta knappen Sök (det vill säga knappen med kommando-ID ID_EDIT_FIND) med ett CFindComboButton objekt.

    Anmärkning

    Du kan skapa ett CFindComboBox objekt i stacken eftersom ReplaceButton kopierar 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