Le GDI Graphics Device Interface (interface de périphérique graphique)

 

Sous Windows, il est interdit d'accéder à un périphérique directement. Ilfaut donc en quelque sorte demander l'autorisation d'accéder à un périphérique. Il existe bien entendu des fonctions qui font cela et ces fonctions vont retourner un handle sur un contexte de périphérique. Vous pourrez ensuite utiliser le GDI pour toutes les opérations grahiques sur différents périphériques (vers l'écran, sur une imprimante ou encore un traceur). L'avantage d'utiliser le GDI étant évident, vous n'avez pas à savoir comment fonctionne le périphérique en question pour effectuer l'opération graphique, ce qui va grandement simplifier la programmation. Toutes les fonctions GDI ont besoin d'un handle sur le contexte de périphérique. Ce sera donc notre premier chapitre:

- Récupération d'un handle sur un contexte de périphérique et traitement des informations le concernant

Récupération/libération d'un handle sur un contexte de périphérique:

GetDC(), ReleaseDC(),
Le message WM_PAINT et ses fonctions: BeginPaint(), EndPaint() ainsi que la structure rcPaint,
GetWindowDC()
et récupération ou invalidation des informations sur ce contexte de périphérique hors message WM_PAINT.
InvalidateRect (), GetClientRect(), GetWindowRect()
mais aussi une remarque sur CreateDC () et CreateCompatibleDC().

- Définition du repère, de son unité et de ses origines

SetMapMode(), SetWindowExtEx(), SetViewportExtEx(), SetViewportOrgEx(), SetWindowOrgEx()
GetMapMode(),GetWindowExtEx(), GetViewportExtEx(), GetViewportOrgEx(), GetWindowOrgEx()
LPtoDP(), DPtoLP()

- Afficher du texte

Afficher un texte par TextOut() ou DrawText()
Changer les attributs d'un texte SetColorText(), SetBkColor(), SetBkMode(), SetTextAlign()
Afficher un texte dans le style barre de status DrawStatusText()
(rien à voir avec la classe d'objet barre de status vu plus loin !)

- Gérer les fontes

Charger une fonte: CreateFont(), AddFontResource() et RemoveFontResource()


- Longueur et hauteur des caractères

Taille d'un caractère ou d'une chaine dans un contexte périphérique (GetTextMetric() et GetTextExtentPoint32())

- Dessiner des points, droites, ...

Tracer un point (SetPixel() ou SetPixelV()) ou lire les attributs d'un points (GetPixel())
Définir le stylo CreatePen() ou utiliser ceux par défaut

Définir le pinceau CreateHashBrush ou utiliser ceux par défaut
Dessiner des lignes, rectangles, ellipse, arc...: GetCurrentPositionEx(), MoveToEx(), LineTo()
Polyline(), PolylineTO(), Rectangle(), RoundRect(), Ellipse(), Arc(), Pie(), FillRect(), FrameRect(), InvertRect().
Ou encore définir des coordonnées dans une structure de type RECT (SetRect())

- Les rasters

Changement du code ROP par la fonction SetROP2()
Récupération du code ROP actuelle par GetROP2()

- Les régions

- Le clipping

- Charger un Bitmap (BMP ou DIB), icône ou curseur

- Complément sur les pinceaux.

- Afficher/Traiter des bitmaps dans des contextes de périphériques.

 

Annexe

GetSysColor/GetSysColorBrush

Les couleurs

 

Remarque:

Sous Windows 3.1, tous objets créés par notre programme en utilisant le GDI, faisait que ces objets occupés de la place "dans la mémoire du GDI". Par conséquent, si vous quittiez le programme sans détruire ces objets, la mémoire n'était pas libérée. Ce qui pouvait finir par poser des problèmes ... de mémoire ! Il fallait donc impérativement détruire tous ces objets dans le programme avant de sortir. Je ne sais pas de nos jours ce que cela donne avec les nouvelles versions de Windows, mais il reste à mon avis plus propre de continuer à détruire ces objets avant de sortir du programme..