winapi - Sådan indstilles standard skrifttype til alle vinduerne i et Win32-program?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil have alle kontrolelementerne (redigere, liste kontrol osv.) I min ansøgning for at have samme skrifttype, som ikke er systemstandarden. Hvordan gør jeg det her? Er der nogen Win32 API, der angiver standardprogrammets applikation?

Bedste reference


Windows giver ingen mekanisme til en skrifttype til hele applikationen. Hver vinduesklasse kan have sin egen adfærd for at vælge en skrifttype, der skal bruges som standard. Det kan forsøge at vælge den skrifttype, der bruges af Windows-dialogbokse, eller det kan simpelthen tegne sin tekst ved hjælp af den skæve bitmap 'system' skrifttype, der automatisk vælges til nye DC'er.


Windows Common Control Window klasser alle reagere på WM\_SETFONT, som er standard vinduet besked for at fortælle et vindue hvilken skrifttype du vil have den til at bruge. Når du implementerer dine egne vinduesklasser (især nye undervisningsvinduklasser), skal du også skrive en handler til WM\_SETFONT: [14]



  1. Hvis din vinduesklasse har børnevinduer, skal din WM\_SETFONT -handler videresende meddelelsen til hver af dem.

  2. Hvis din vinduesklasse bruger en brugerdefineret tegning, skal du sørge for at gemme HFONT'en du modtager i din WM\_SETFONT -håndterer og vælge den i den DC, du bruger, når du tegner dit vindue.

  3. Hvis din vinduesklasse bruges som et øverste vindue, skal det være logisk at vælge sin egen skrifttype, da det ikke har noget forældrevindue til at sende det en WM\_SETFONT besked.



Bemærk, at dialogstyring gør noget af dette til dig; Når der oprettes en dialogskabelon, indstilles den nye dialogs skrifttype til den skrifttype, der er nævnt i skabelonen, og dialogen sender WM\_SETFONT hele dets barnkontrol.

Andre referencer 1


Gennemfør dette:


    bool CALLBACK SetFont(HWND child, LPARAM font){
        SendMessage(child, WM\_SETFONT, font, true);
        return true;
    }


inde i en separat fil eller bare i main.cpp og så bare køre:


EnumChildWindows(hwnd, (WNDENUMPROC)SetFont, (LPARAM)GetStockObject(DEFAULT\_GUI\_FONT));


når du vil, for eksempel i meddelelsen WM\_CREATE, når du har oprettet alle dine barnevinduer!


Jeg har altid en SetFont.cpp og en SetFont.h i mine win32 GUI applikationsløsninger.

Andre referencer 2


Ja du kan !


HFONT defaultFont;
defaultFont = (HFONT)GetStockObject(DEFAULT\_GUI\_FONT);
SendMessage(handlerControl, WM\_SETFONT, WPARAM (defaultFont), TRUE); // Send this to each control

Andre referencer 3


En praktisk metode til at indstille skrifttypen til alle børnevinduer i et opkald:


SendMessageToDescendants( WM\_SETFONT, 
                          (WPARAM)m\_fntDialogFont.GetSafeHandle(), 
                          0 ); 

Andre referencer 4


Du kan ikke have mulighed for at gøre dette til alle kontroller på samme tid. Du skal indstille det via ressourceeditoren, som det blev foreslået før, eller ringe SetFont () manuelt på hver kontrol.

Andre referencer 5


Du kan indstille skrifttypen for hver dialogboks gennem ressourcevisningen. Højreklik på en dialogboks (ikke på anden kontrol), vælg egenskaber og skrifttypen.