Come impostare il font di default per tutte le finestre di un’Applicazione di Win32?

Io voglio che tutti i controlli (modifica,lista di controllo, ecc…) che la mia domanda per avere lo stesso tipo di carattere che non è l’impostazione predefinita di sistema. Come faccio a fare questo? C’è qualche API Win32, che stabilisce l’applicazione font di default?

InformationsquelleAutor Canopus | 2009-06-02

 

6 Replies
  1. 8

    Windows non fornisce alcun meccanismo per un livello di applicazione di carattere. Ogni classe di finestra può avere il proprio comportamento per la scelta di un tipo di carattere da utilizzare per impostazione predefinita. Si può provare a selezionare il tipo di carattere utilizzato da shell di Windows, le finestre di dialogo, o si può semplicemente disegnare il testo utilizzando l’orrida bitmap “sistema” tipo di carattere selezionato automaticamente in un nuovo DCs.

    Di controlli comuni di Windows finestra classi rispondono tutti a WM_SETFONT, che è lo standard di finestra di messaggio per raccontare una finestra che tipo di carattere che si desidera utilizzare. Quando si implementa la propria finestra classi (in particolare del nuovo bambino della finestra di controllo classi), si dovrebbe anche scrivere un gestore per WM_SETFONT:

    1. Se la tua classe di finestra ha windows, il WM_SETFONT gestore deve inoltrare il messaggio a ciascuno di essi.
    2. Se la tua classe di finestra qualsiasi disegno personalizzato, assicurarsi di salvare il HFONT ricevi nella tua WM_SETFONT gestore e selezionare nella DC si utilizza quando il disegno della finestra.
    3. Se la tua classe di finestra viene utilizzato come una finestra di primo livello, sarà necessario logica di scegliere il proprio tipo di carattere, poiché questo non avrà nessun genitore finestra per inviare un WM_SETFONT messaggio.

    Si noti che la finestra di dialogo gestore non fa parte di questo per voi; quando si crea un’istanza di un modello di finestra di dialogo, la nuova finestra di dialogo tipo di carattere è impostato per il tipo di carattere denominato nel modello, e la finestra di dialogo invia WM_SETFONT tutti i suoi controlli figlio.

    • Fare tutti i controlli di Windows reagire a questo messaggio? Ci sono eccezioni conoscete?
  2. 13

    Implementare questa:

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

    all’interno di un file separato o in main.cpp e poi basta eseguire:

    EnumChildWindows(hwnd, (WNDENUMPROC)SetFont, (LPARAM)GetStockObject(DEFAULT_GUI_FONT));

    ogni volta che si desidera, per esempio, nel WM_CREATE messaggio, dopo aver creato tutto il vostro bambino di windows!

    Ho sempre un SetFont.cpp e un SetFont.h nel mio win32 GUI di soluzioni applicative.

    • Grazie! Questo funziona perfettamente.
    • Bellissima!!! Breve e semplice, con precise istruzioni.
  3. 6

    Sì, è possibile !

    HFONT defaultFont;
    defaultFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
    SendMessage(handlerControl, WM_SETFONT, WPARAM (defaultFont), TRUE); //Send this to each control
  4. 4

    Un metodo pratico per impostare il tipo di carattere per tutti i bambini di windows in una sola chiamata:

    SendMessageToDescendants( WM_SETFONT, 
                              (WPARAM)m_fntDialogFont.GetSafeHandle(), 
                              0 ); 
  5. 1

    Non è possibile, non c’è modo di fare questo per tutti i controlli, allo stesso tempo. È necessario impostare attraverso l’editor di risorse, come è stato suggerito prima, o chiamare SetFont() manualmente a ogni controllo.

  6. -1

    È possibile impostare il tipo di carattere per ogni finestra di Dialogo attraverso la visualizzazione delle risorse. Fare clic destro su di una finestra (non di controllo), selezionare proprietà e il tipo di carattere.

Lascia un commento