|
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:
kernel32: fonctionnalités de bas niveau du système d'exploitation
comme la gestion de la mémoire et des ressources;user32: MessageBox, timer, menus, communications;gdi32, dont nous allons discuter quelques aspects.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]