Partager via


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.