Om verktygsfältskontroller

Ett verktygsfält är en kontroll som innehåller en eller flera knappar. Varje knapp, när den klickas av en användare, skickar ett kommandomeddelande till det överordnade fönstret. Vanligtvis motsvarar knapparna i ett verktygsfält objekt i programmets meny, vilket ger ett ytterligare och mer direkt sätt för användaren att komma åt ett programs kommandon.

Följande skärmbild visar ett fönster som innehåller ett enkelt verktygsfält för filåtgärder. Programmet har aktiverat visuella formatmallar. Knappen Spara är "het" eftersom markören hovrar över den när skärmbilden togs. Kontrollens faktiska utseende varierar beroende på operativsystemet och det användarvalda temat.

skärmdump av ett fönster med ett verktygsfält med tre knappar; en knapp är aktiv

Följande skärmbild visar samma kontroll i ett program som kompilerats utan att visuella format har aktiverats.

skärmbild av ett fönster utan visuella format: ingen av knapparna ser heta ut

I följande avsnitt beskrivs vilka funktioner du bör tänka på när du planerar ett verktygsfält. Specifik information om implementering och exempelkod finns i Using Toolbar Controls.

Ange storlek och position för verktygsfältet

Om du skapar ett verktygsfält med CreateToolbarExkan du ange verktygsfältets höjd och bredd i bildpunkter.

Notera

Använd CreateToolbarEx rekommenderas inte eftersom det inte stöder nya funktioner i verktygsfält, inklusive bildlistor. Mer information om hur du skapar verktygsfält finns i Använda verktygsfältskontroller.

 

Funktionen CreateWindowEx har inte parametrar för att ange verktygsfältets storlek. I verktygsfältsfönstrets procedur anges automatiskt storleken och positionen för verktygsfältsfönstret. Höjden baseras på knapparnas höjd i verktygsfältet. Bredden är samma som bredden på det överordnade fönstrets klientområde. Om du vill ändra inställningarna för automatisk storlek skickar du ett TB_SETBUTTONSIZE meddelande. De CCS_TOP och CCS_BOTTOM vanliga kontrollformaten avgör om verktygsfältet är placerat längst upp eller längst ned i klientområdet. Som standardinställning har ett verktygsfält stilen CCS_TOP.

Dessutom justerar verktygsfältets fönsterprocedur automatiskt storleken på verktygsfältet när det tar emot ett WM_SIZE eller TB_AUTOSIZE meddelande. Ett program bör skicka något av dessa meddelanden när storleken på det överordnade fönstret ändras eller efter att ett meddelande har skickats som kräver att verktygsfältets storlek justeras, till exempel ett TB_SETBUTTONSIZE meddelande.

Standardbeteenden för storlek och placering i verktygsfältet kan inaktiveras genom att ange CCS_NORESIZE och CCS_NOPARENTALIGN vanliga kontrollformat. Verktygsfältskontroller som hanteras av rebar-kontroller måste ange dessa stilar eftersom rebar-kontrollerna storleksanpassar och placerar verktygsfältet.

Transparenta verktygsfält

Verktygsfältskontroller har stöd för ett transparent utseende som gör att klientområdet under verktygsfältet kan visas. Det finns två typer av transparenta verktygsfält, en med platta knappar och en med tredimensionella knappar. Om du vill att applikationen ska matcha Windows-gränssnittet använder du verktygsfältet för platt transparent format.

Följande skärmbild visar de två typerna av transparenta verktygsfält, som inte använder visuella format.

skärmbild av två fönster med olika verktygsfältsformat, men båda verktygsfälten är transparenta

Följande skärmbild visar ett transparent verktygsfält som det kan visas i Windows Vista, med visuella format aktiverade. Dialogrutans bakgrundsfärg har ändrats för att göra transparensen tydligare.

skärmbild av ett fönster i Windows Vista med ett transparent verktygsfält

För att skapa ett transparent verktygsfält behöver du bara lägga till TBSTYLE_FLAT eller TBSTYLE_TRANSPARENT i parametern för fönsterformatet i CreateWindowEx. Om du inte vill att en linje ska visas för att indikera verktygsfältets botten, ska du inte använda fönsterstilen WS_BORDER.

Not

När du använder visuella format kan verktygsfälten vara flata som standard.

 

Verktygsfält i listformat

Med knappar i verktygsfältet kan du visa både text- och bitmappar. Knapparna i ett verktygsfält som skapats med TBSTYLE_LIST formatmall placerar text till höger om bitmappen i stället för under den.

Följande skärmbild visar ett verktygsfält med listformatet.

skärmbild av ett verktygsfält med text till höger om varje ikon

Du kan använda formatmallen TBSTYLE_LIST verktygsfält i kombination med TBSTYLE_FLAT formatmall för att skapa ett verktygsfält med platta knappar.

Definiera knappbilder

Det finns två sätt att ange bilder för knappar – efter bitmappar eller efter bildlistor. Ett program måste välja vilken metod som ska användas. Den kan inte använda båda metoderna med samma verktygsfältskontroll. Observera att funktionen CreateToolbarEx använder bitmappsmetoden. Program som vill använda avbildningslistemetoden måste använda funktionen CreateWindowEx för att skapa verktygsfältskontrollen.

Definiera knappbilder med hjälp av bitmappar

Varje knapp i ett verktygsfält kan innehålla en bitmappad bild. Ett verktygsfält använder en intern lista för att lagra den information som behövs för att rita bilderna. När du anropar funktionen CreateToolbarEx anger du en monokrom bitmapp eller färgbitmapp som innehåller de första bilderna, och verktygsfältet lägger till informationen i den interna listan över bilder. Du kan lägga till ytterligare bilder senare med hjälp av meddelandet TB_ADDBITMAP.

Varje bild har ett nollbaserat index. Den första bilden som läggs till i den interna listan har ett index på 0, den andra bilden har ett index på 1 och så vidare. TB_ADDBITMAP lägger till bilder i slutet av listan och returnerar indexet för den första nya avbildningen som den lade till. Om du vill associera bilden med en knapp måste du skicka ett TB_ADDBUTTONS meddelande och ange bildens index när du har lagt till bitmappar i den interna bildlistan.

Windows förutsätter att alla bitmappade bilder i ett verktygsfält har samma storlek. Du anger storleken när du skapar verktygsfältet med hjälp av CreateToolbarEx. Om du använder funktionen CreateWindowEx för att skapa ett verktygsfält anges storleken på bilderna till standarddimensionerna 16 x 15 bildpunkter. Du kan använda meddelandet TB_SETBITMAPSIZE för att ändra dimensionerna för bitmappade bilder, men du måste göra det innan du lägger till några bilder i den interna listan.

Definiera knappbilder med hjälp av bildlistor

Du kan också lagra knappbilder i en uppsättning bildlistor. En bildlista är en samling bilder av samma storlek, som var och en kan refereras till av dess index. Bildlistor används för att hantera stora uppsättningar ikoner eller bitmappar. Du kan använda upp till tre olika bildlistor för att visa knappar i olika tillstånd, enligt följande tabell.

Stat Beskrivning
Normal Knappar i deras standardtillstånd.
Het Knappar som är under pekaren eller trycks in. Frekventa objekt stöds endast i verktygsfältskontroller som har TBSTYLE_FLAT formatmall.
Handikappad Knappar som är inaktiverade.

 

När verktygsfältet har förstörts måste program frigöra alla avbildningslistor som de har skapat.

Definiera text för knappar

Varje knapp kan visa en sträng utöver, eller i stället för, en bild. Ett verktygsfält har en intern lista som innehåller alla strängar som är tillgängliga för verktygsfältsknappar. Du lägger till strängar i den interna listan med hjälp av meddelandet TB_ADDSTRING och anger adressen till bufferten som innehåller de strängar som ska läggas till. Varje sträng måste vara null-avslutad och den sista strängen måste avslutas med två null-tecken.

Varje sträng har ett nollbaserat index. Den första strängen som läggs till i den interna listan med strängar har ett index på 0, den andra strängen har ett index på 1 och så vidare. TB_ADDSTRING lägger till strängar i slutet av listan och returnerar indexet för den första nya strängen. Du använder en strängs index för att associera strängen med en knapp.

Att använda TB_ADDSTRING är inte det enda sättet att lägga till strängar i ett verktygsfält. Du kan visa en sträng i en knapp genom att skicka en strängpekare i iString medlem i TBBUTTON- struktur som skickas till TB_ADDBUTTONS. Dessutom kan du använda TB_SETBUTTONINFO för att tilldela text till en knapp i verktygsfältet.

Lägga till verktygsfältsknappar

Om du använder funktionen CreateToolbarEx för att skapa ett verktygsfält kan du lägga till knappar i verktygsfältet genom att fylla i en matris med TBBUTTON- strukturer och ange adressen till matrisen i funktionsanropet. Funktionen CreateWindowEx har dock ingen parameter för att skicka en TBBUTTON- struktur. CreateWindowEx skapar ett tomt verktygsfält som du fyller genom att skicka ett TB_ADDBUTTONS meddelande och ange adressen för en TBBUTTON- struktur.

När ett verktygsfält har skapats kan du lägga till knappar genom att skicka ett TB_INSERTBUTTON eller TB_ADDBUTTONS meddelande. Varje knapp beskrivs av en TBBUTTON- struktur, som definierar attributen för knappen, inklusive indexen för strängen och bitmappen samt dess format, tillstånd, kommandoidentifierare och programdefinierade 32-bitarsvärde.

Anmärkning

Om du använder funktionen CreateWindowEx för att skapa ett verktygsfält måste du skicka meddelandet TB_BUTTONSTRUCTSIZE innan du lägger till några knappar. Meddelandet skickar storleken på strukturen TBBUTTON till verktygsfältet.

 

Knappformat för verktygsfält

En knapps format avgör hur knappen visas och hur den svarar på användarindata. Till exempel skapar BTNS_BUTTON formatmallen en verktygsfältsknapp som fungerar som en standardknapp. En knapp som har BTNS_CHECK stil liknar en standardknapp, förutom att den växlar mellan de nedtryckta och icke-intryckta tillstånden varje gång användaren klickar på den.

Du kan skapa grupper med verktygsfältsknappar som fungerar som alternativknappar genom att använda stilen BTNS_GROUP eller BTNS_CHECKGROUP. Detta gör att en knapp förblir intryckt tills användaren väljer en annan knapp i gruppen. En grupp definieras som en sammanhängande samling knappar, alla med BTNS_GROUP eller BTNS_CHECKGROUP formatmall.

Formatet BTNS_SEP skapar ett litet mellanrum mellan knappar eller ritar en etsning mellan knappar i platta verktygsfält. En knapp med formatmallen BTNS_SEP tar inte emot användarindata.

Version 5.80 av de vanliga kontrollerna introducerade några nya knappformat i verktygsfältet och bytte namn på några av de äldre formatmallarna. Alla knappformatsflaggor börjar nu med BTNS_XXX i stället för TBSTYLE_XXX. En lista och en diskussion om knappformaten finns i Verktygsfältskontroll och Knappformat.

Knapptillstånd för verktygsfält

Varje knapp i ett verktygsfält har ett tillstånd. Verktygsfältet uppdaterar en knapps tillstånd för att återspegla användaråtgärder, till exempel genom att klicka på knappen. Tillståndet anger om knappen för närvarande är tryckt eller inte, aktiverad eller inaktiverad, dold eller synlig. Även om ett program anger en knapps ursprungliga tillstånd när du lägger till knappen i verktygsfältet kan det ändra och hämta tillståndet genom att skicka TB_GETSTATE och TB_SETSTATE meddelanden till verktygsfältet. En lista över tillstånd för knappar i verktygsfältet finns under Verktygsfältstillstånd.

Kommandoidentifierare

Varje knapp har en programdefinierad kommandoidentifierare associerad med den. Knappidentifierare definieras vanligtvis i en programhuvudfil. En klistra in-knapp kan till exempel definieras som:

#define ID_PASTE 100

När användaren väljer en knapp skickar verktygsfältet det överordnade fönstret ett WM_COMMAND eller WM_NOTIFY meddelande som innehåller knappens kommandoidentifierare. Det överordnade fönstret undersöker kommandoidentifieraren och utför kommandot som är associerat med knappen. Information om när kontroller skickar WM_COMMAND meddelanden och när de skickar WM_NOTIFYfinns i avsnittet Kommentarer i WM_NOTIFY dokumentationen.

Knappstorlek och position

Ett verktygsfält håller reda på sina knappar genom att tilldela varje knapp ett positionsindex. Indexet är nollbaserat. den vänstra knappen har ett index på 0, nästa knapp till höger har ett index på 1 och så vidare. Ett program måste ange indexet för en knapp när meddelanden skickas för att hämta information om knappen eller för att ange knappens attribut.

Ett verktygsfält uppdaterar positionsindexen när knappar infogas och tas bort. Ett program kan hämta det aktuella positionsindexet för en knapp med hjälp av meddelandet TB_COMMANDTOINDEX. Meddelandet anger kommandoidentifieraren för en knapp, och verktygsfältsfönstret använder identifieraren för att hitta knappen och returnera dess positionsindex.

Alla knappar i ett verktygsfält har samma storlek. Funktionen CreateToolbarEx kräver att du anger knapparnas ursprungliga storlek när du skapar verktygsfältet. När du använder funktionen CreateWindowEx anges den ursprungliga storleken till standarddimensionerna 24 med 22 bildpunkter. Du kan använda meddelandet TB_SETBUTTONSIZE för att ändra knappstorleken, men du måste göra det innan du lägger till knappar i verktygsfältet. Meddelandet TB_GETITEMRECT hämtar knapparnas aktuella dimensioner.

När du lägger till en sträng som är längre än någon sträng i verktygsfältet återställs automatiskt bredden på knapparna i verktygsfältet. Bredden är inställd på att rymma den längsta strängen i verktygsfältet.

Möjliggöra anpassning

Ett verktygsfält har inbyggda anpassningsfunktioner som du kan göra tillgängliga för användaren genom att ge verktygsfältet CCS_ADJUSTABLE gemensamt kontrollformat. Med anpassningsfunktionerna kan användaren dra en knapp till en ny position eller ta bort en knapp genom att dra den från verktygsfältet. Dessutom kan användaren dubbelklicka på verktygsfältet för att visa dialogrutan Anpassa verktygsfält, vilket gör att användaren kan lägga till, ta bort och ordna om verktygsfältsknappar. Om du vill visa dialogrutan använder du meddelandet TB_CUSTOMIZE. Ett program avgör om anpassningsfunktionerna är tillgängliga för användaren och styr i vilken utsträckning användaren kan anpassa verktygsfältet.

Som en del av anpassningsprocessen behöver program ofta spara och återställa ett verktygsfälts tillstånd. Många program lagrar till exempel verktygsfältets tillstånd innan användaren börjar anpassa verktygsfältet om användaren senare vill återställa verktygsfältet till sitt ursprungliga tillstånd. Verktygsfältet håller inte automatiskt reda på sitt ursprungliga tillstånd innan anpassning. Programmet måste spara verktygsfältets tillstånd för att kunna återställa det. Mer information finns i Använda verktygsfältskontroller.

Aktivera snabbspårning

Snabbspårning innebär att när pekaren flyttas över ett objekt ändras knappens utseende. När visuella format är aktiverade stöder verktygsfälten snabbspårning som standard. Annars har endast verktygsfältskontroller som skapats med TBSTYLE_FLAT formatmall stöd för snabbspårning. Du kan använda andra fönsterformat i kombination med TBSTYLE_FLAT för att skapa verktygsfält som möjliggör snabbspårning men som har ett annat utseende än ett platt verktygsfält. Mer information finns i Använda verktygsfältskontroller.