Index du site
Google

La GDI de Windows

Le texte formaté et le dessin (graphisme) sont confiés à une API particulière de Windows appelée la Graphics Device Interface ou GDI.

La GDI est une des trois principales bibliothèques d'import, celles qui sont liées par défaut à notre code objet:

En prémiminaire, remarquons que la (re)coloration de certains contrôles fait appel à la GDI (voir l'onglet Contrôles et le code source tec007.c du contrôle edit, par exemple) en traitant le message WM_CTLCOLORSTATIC pour un contrôle static ou un edit en lecture seule (style ES_READONLY) et/ou désactivé (voir MSDN: EnableWindow), et le message WM_CTLCOLOREDIT pour un contrôle edit activé et en lecture-écriture. Dans notre exemple, la fonction SetBkColor peint le fond du contrôle edit en blanc avec la macro RGB dont les paramètres (de 0 à 255) sont les valeurs de rouge, vert et bleu à mélanger pour obtenir la couleur désirée; le texte du contrôle edit est coloré en bleu par la fonction SetTextColor. De même, le fond du contrôle static est peint en beige "système" comme les boutons, et son texte est rouge (une autre fonction intéressante dans ce contexte est SetBkMode que nous n'utilisons pas ici). Notons qu'après avoir traité ces messages, l'application doit renvoyer un handle de brosse valide et converti en LRESULT.

Voici le morceau de code, à replacer dans son contexte pour pouvoir le compiler:

switch(message) {
    // ...
    // Réglage des couleurs:
    case WM_CTLCOLOREDIT:
        switch(GetDlgCtrlID((HWND) lParam)) {
            case IDC_EDIT:
                SetBkColor((HDC) wParam, RGB(255,255,255));
                SetTextColor((HDC) wParam, RGB(32,32,128));
                return (LRESULT) GetStockObject(WHITE_BRUSH);
            default:
                break;
        }
        break;
    case WM_CTLCOLORSTATIC:
        switch(GetDlgCtrlID((HWND) lParam)) {
            case IDC_STATIC:
                SetBkColor((HDC) wParam, GetSysColor(COLOR_BTNFACE));
                SetTextColor((HDC) wParam, RGB(128,0,0));
                return (LRESULT) GetSysColorBrush(COLOR_BTNFACE);
            default:
                break;
        }
        break;
    // ...
}

Cliquez sur les onglets du sous-menu pour en savoir plus sur le dessin, puis (dans l'ordre, c'est conseillé) les polices de caractères, etc.

[màj 9 octobre 2007]

Copyright © 2008 B. Challier • légalcontact Valid XHTML 1.0 Valid CSS 2haut