Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Ett statusfält är ett vågrätt fönster längst ned i ett överordnat fönster där ett program kan visa olika typer av statusinformation. Statusfältet kan delas in i delar för att visa mer än en typ av information. Följande skärmbild visar statusfältet i Microsoft Windows Paint-programmet. I det här fallet innehåller statusfältet texten "För hjälp klickar du på Hjälpämnen på hjälpmenyn". Statusfältet är det område längst ned i fönstret som innehåller hjälptext och koordinatinformation.
Det här avsnittet innehåller följande avsnitt.
- typer och formatmallar
- storlek och höjd
- Multiple-Part statusstaplar
- textåtgärder i statusfältet
- Owner-Drawn statusstaplar
- statusstaplar för enkelt läge
- meddelandebearbetning av standardstatusfält
Typer och formatmallar
Standardpositionen för ett statusfält är längst ned i det överordnade fönstret, men du kan ange CCS_TOP formatmall så att det visas överst i det överordnade fönstrets klientområde.
Du kan ange SBARS_SIZEGRIP formatmall för att inkludera ett storleksgrepp till höger i statusfältet.
Not
Det rekommenderas inte att kombinera CCS_TOP- och SBARS_SIZEGRIP formatmallarna eftersom storlekshandtaget inte fungerar.
Storlek och höjd
Fönsterproceduren för statusfältet anger automatiskt fönstrets ursprungliga storlek och position och ignorerar de värden som anges i funktionen CreateWindowEx. Bredden är densamma som för det överordnade fönstrets klientområde. Höjden baseras på måtten för teckensnittet som för närvarande är markerat i statusfältets enhetskontext och på bredden på fönstrets kantlinjer.
Fönsterproceduren justerar automatiskt statusfältets storlek när det tar emot ett WM_SIZE meddelande. När storleken på det överordnade fönstret ändras skickar det överordnade objektet vanligtvis ett WM_SIZE meddelande till statusfältet.
Ett program kan ange den minsta höjden för ett statusfälts ritningsområde genom att skicka ett SB_SETMINHEIGHT meddelande till fönstret, som anger minsta höjd i bildpunkter. Ritytan innehåller inte fönstrets kantlinjer. En minsta höjd är användbar för att rita i ett ägarritat statusfält. Mer information finns i Owner-Drawn statusstaplar senare i det här kapitlet.
Du hämtar bredden på kantlinjerna i ett statusfält genom att skicka fönstret ett SB_GETBORDERS meddelande. Meddelandet innehåller adressen till en matris med tre element som tar emot bredderna.
Multiple-Part statusstaplar
Ett statusfält kan ha många olika delar, där var och en visar en annan textrad. Du delar upp ett statusfält i delar genom att skicka ett SB_SETPARTS meddelande till fönstret och ange antalet delar som ska skapas och adressen till en heltalsmatris. Matrisen innehåller ett element för varje del och varje element anger klientkoordinaten för en dels högra kant.
Ett statusfält kan ha högst 256 delar, även om program vanligtvis använder mycket färre än så. Du hämtar ett antal delar i ett statusfält, samt koordinaten för den högra kanten av varje del, genom att skicka fönstret ett SB_GETPARTS meddelande.
Textåtgärder för statusfält
Du anger texten i en del av ett statusfält genom att skicka meddelandet SB_SETTEXT, ange nollbaserat index för en del, en adress för strängen som ska ritas i delen och tekniken för att rita strängen. Ritningstekniken avgör om texten har en kantlinje och, om den gör det, kantlinjens format. Den avgör också om det överordnade fönstret ansvarar för att rita texten. Mer information finns i avsnittet Owner-Drawn statusstaplar nedan.
Som standard är texten vänsterjusterad inom den angivna delen av ett statusfält. Du kan bädda in tabbtecken (\ t) i texten för att centrera eller högerjustera den. Text till höger om ett enskilt fliktecken centreras och text till höger om ett andra fliktecken är högerjusterad.
Om du vill hämta text från ett statusfält använder du meddelandena SB_GETTEXTLENGTH och SB_GETTEXT.
Om ditt program använder ett statusfält som bara har en del kan du använda WM_SETTEXT, WM_GETTEXToch WM_GETTEXTLENGTH meddelanden för att utföra textåtgärder. Dessa meddelanden hanterar endast den del som har ett index på noll, så att du kan behandla statusfältet ungefär som en statisk textkontroll.
Om du vill visa en statusrad utan att skapa ett statusfält använder du funktionen DrawStatusText. Funktionen använder samma tekniker för att rita statusen som fönsterproceduren för statusfältet, men den anger inte statusinformationens storlek och position automatiskt. När du anropar funktionen måste du ange statusinformationens storlek och position samt enhetskontexten för fönstret där den ska ritas.
Owner-Drawn statusstaplar
Du kan definiera att enskilda delar i ett statusfält ska vara ägarritade delar. Med den här tekniken får du mer kontroll än du annars skulle ha över utseendet på fönsterdelen. Du kan till exempel visa en bitmapp i stället för text eller rita text med ett annat teckensnitt.
Om du vill definiera en fönsterdel som ägarritad skickar du meddelandet SB_SETTEXT till statusfältet och anger delen och SBT_OWNERDRAW ritningsteknik. När SBT_OWNERDRAW anges är parametern lParam ett 32-bitars programdefinierat värde som programmet kan använda när du ritar delen. Du kan till exempel ange ett teckensnittshandtag, ett bitmappshandtag, en adress för en sträng och så vidare.
När ett statusfält behöver rita en ägarritad del skickar den det WM_DRAWITEM meddelandet till det överordnade fönstret. Parametern wParam i meddelandet är den underordnade fönsteridentifieraren för statusfältet, och parametern lParam är adressen till en DRAWITEMSTRUCT- struktur. Det överordnade fönstret använder informationen i strukturen för att rita delen. För en ägarritad del av ett statusfält innehåller DRAWITEMSTRUCT följande information.
| Medlem | Beskrivning |
|---|---|
| CtlType | Odefinierad; använd inte. |
| CtlID | Underordnad fönsteridentifierare för statusfältet. |
| itemID | Nollbaserat index för den del som ska ritas. |
| itemAction | Odefinierad; använd inte. |
| itemState | Odefinierad; använd inte. |
| hwndItem | Hantera till statusfältet. |
| hDC | Hantera till enhetskontexten för statusfältet. |
| rcItem | Koordinater för den fönsterdel som ska ritas. Koordinaterna är relativa till det övre vänstra hörnet i statusfältet. |
| itemData | Programdefinierat 32-bitarsvärde som anges i parametern lParam i SB_SETTEXT-meddelandet. |
Statusstaplar för enkelt läge
Du placerar ett statusfält i "enkelt läge" genom att skicka ett SB_SIMPLE meddelande. Ett enkelt lägesstatusfält visar bara en del. När texten i fönstret har angetts är fönstret ogiltigt, men det ritas inte om förrän nästa WM_PAINT. Om du väntar på meddelandet minskar skärmflimmern genom att minimera antalet gånger fönstret ritas om. Ett enkelt lägesstatusfält är användbart för att visa hjälptext för menyobjekt medan användaren bläddrar igenom menyn.
Strängen som visas i ett statusfält i enkelt läge underhålls separat från de strängar som visas i icke-önskvärt läge. Det innebär att du kan placera fönstret i enkelt läge, ange dess text och växla tillbaka till icke-exempelläge utan att text i icke-textläge ändras.
När du anger texten i ett enkelt lägesstatusfält kan du ange valfri ritningsteknik förutom SBT_OWNERDRAW. Ett enkelt lägesstatusfält stöder inte ägarritning.
Meddelandebearbetning med standardstatusfält
I det här avsnittet beskrivs de meddelanden som hanteras av fönsterproceduren för den fördefinierade STATUSCLASSNAME-klassen.
| Meddelande | Standardbearbetning |
|---|---|
| WM_CREATE | Initierar statusfältet. |
| WM_DESTROY | Frigör resurser som allokerats för statusfältet. |
| WM_GETFONT | Returnerar handtaget till det aktuella teckensnitt som statusfältet ritar sin text med. |
| WM_GETTEXT | Kopierar texten från den första delen av ett statusfält till en buffert. Den returnerar ett 32-bitarsvärde som anger längden, i tecken, på texten och den teknik som används för att rita texten. |
| WM_GETTEXTLENGTH | Returnerar ett 32-bitarsvärde som anger längden, i tecken, på texten i den första delen av ett statusfält och den teknik som används för att rita texten. |
| WM_NCHITTEST | Returnerar HTBOTTOMRIGHT-värdet om musmarkören är i storlekshandtaget, vilket gör att systemet visar storleksmarkören. Om musmarkören inte är i storlekshandtaget skickar statusfältet det här meddelandet till funktionen DefWindowProc. |
| WM_PAINT | Målar upp statusfältets ogiltiga region. Om parametern wParam inte ärNULL-förutsätter kontrollen att värdet är en HDC och målar med den enhetskontexten. |
| WM_SETFONT | Väljer teckensnittshandtaget i enhetskontexten för statusfältet. |
| WM_SETTEXT | Kopierar den angivna texten till den första delen av ett statusfält med standardritningsåtgärden (anges som noll). Den returnerar TRUE- om det lyckas eller FALSE- annat. |
| WM_SIZE | Ändrar storlek på statusfältet baserat på den aktuella bredden för det överordnade fönstrets klientområde och höjden på det aktuella teckensnittet i statusfältet. |