Dessin d’une ligne
Cette rubrique montre comment tracer une ligne à l’aide de GDI Plus.
Pour dessiner une ligne dans Windows GDI+, vous avez besoin d’un objet Graphics , d’un objet Pen et d’un objet Color . L’objet Graphics fournit la méthode DrawLine, et l’objet Pen contient des attributs de la ligne, tels que la couleur et la largeur. L’adresse de l’objet Pen est passée en tant qu’argument à la méthode DrawLine .
Le programme suivant, qui trace une ligne de (0, 0) à (200, 100), se compose de trois fonctions : WinMain, WndProc et OnPaint. Les fonctions WinMain et WndProc fournissent le code fondamental commun à la plupart des applications Windows. Il n’existe aucun code GDI+ dans la fonction WndProc . La fonction WinMain a une petite quantité de code GDI+, à savoir les appels requis à GdiplusStartup et GdiplusShutdown. Le code GDI+ qui crée un objet Graphics et dessine une ligne se trouve dans la fonction OnPaint .
La fonction OnPaint reçoit un handle à un contexte d’appareil et le transmet à un constructeur Graphics . L’argument passé au constructeur Pen est une référence à un objet Color . Les quatre nombres passés au constructeur de couleur représentent les composants alpha, rouge, vert et bleu de la couleur. Le composant alpha détermine la transparence de la couleur ; 0 est entièrement transparent et 255 est entièrement opaque. Les quatre nombres passés à la méthode DrawLine représentent le point de départ (0, 0) et le point de fin (200, 100) de la ligne.
#include <stdafx.h>
#include <windows.h>
#include <objidl.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
VOID OnPaint(HDC hdc)
{
Graphics graphics(hdc);
Pen pen(Color(255, 0, 0, 255));
graphics.DrawLine(&pen, 0, 0, 200, 100);
}
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wndClass;
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
// Initialize GDI+.
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = TEXT("GettingStarted");
RegisterClass(&wndClass);
hWnd = CreateWindow(
TEXT("GettingStarted"), // window class name
TEXT("Getting Started"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL); // creation parameters
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
GdiplusShutdown(gdiplusToken);
return msg.wParam;
} // WinMain
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
OnPaint(hdc);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
} // WndProc
Notez l’appel à GdiplusStartup dans la fonction WinMain . Le premier paramètre de la fonction GdiplusStartup est l’adresse d’un ULONG_PTR. GdiplusStartup remplit cette variable avec un jeton qui est passé ultérieurement à la fonction GdiplusShutdown . Le deuxième paramètre de la fonction GdiplusStartup est l’adresse d’une structure GdiplusStartupInput . Le code précédent s’appuie sur le constructeur GdiplusStartupInput par défaut pour définir les membres de la structure de manière appropriée.