Categories: VC/C++

Disegnare nella Finestra in Visual C/C++

Per disegnare con le primitive grafiche dell’sdk di Windows in Visual C/C++ occore gestire il tutto con l’intercettazione del messaggio WM_PAINT che viene lanciato ogni volta che occorre aggiornare il disegno della finestra ( UpdateWindow ). L’inizio del disegno vero e proprio avviene tra la funzione BeginPaint, che restituisce l’handle del DC ( Device Context ) della finestra, ed EndPaint. Vediamo come implementare il tutto con il disegno di un’ellisse nell’applicazione utilizzata nella scorsa lezione.

...
LONG FAR PASCAL WindowProc(HWND hWnd, UINT msg,
            WPARAM wParam, LPARAM lParam)
{
      PAINTSTRUCT ps;
      HDC hdc;

      switch (msg)
      {
             case WM_DESTROY:
                   PostQuitMessage(0);
                   break;
             case WM_PAINT:
                   hdc = BeginPaint(hWnd, &ps);
                   Ellipse(hdc, 200, 200, 500, 400);
                   TextOut(hdc, 280, 245, "<- Ellisse", 10);
                   ValidateRect(hWnd, NULL);
                   EndPaint(hWnd, &ps);
                   break;
              default:
                    return DefWindowProc(hWnd, msg, wParam, lParam);
   }
   return 0;
}
...

Osserviamo le funzioni all’interno del messaggio WM_PAINT e l’inizio del disegno con BeginPaint che, come dicevamo prima, ritorna l’handle del DC della client area della finestra. Una volta ottenuto l’handle al dispositivo possiamo disegnarci sopra con le funzioni grafiche dell’sdk, che vi invito a studiare. Ho utilizzato Ellipse, una funzione che vuole l’handle al device context ed il rettangolo in cui inscrivere l’ellisse, se vi venisse troppo grande potete diminuire i valori. Da notare che queste primitive grafiche vogliono sempre l’handle su cui scrivere, il device context è la lavagna su cui disegnare e le dimensioni, che si esprimono con gli assi cartesiani, il solito ascissa ed ordinata; in particolare nel nostro esempio sono left, top, right e bottom. Incluso nell’ellisse ho inserito anche del testo e poi ho chiuso il disegno. Una volta fatto tutto occorre salvare il device con ValidateRect e dargli NULL per validare tutta la client area della finestra.

<< Lezione Precedente – Inizio CorsoLezione Successiva >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Recent Posts

MerciGest: il gestionale di magazzino semplice e gratuito

MerciGest è il software gestionale gratuito per Windows che semplifica la gestione del magazzino: giacenze,…

3 giorni ago

Software gestionali con SQL Server: un archivio unico, accessibile ovunque

Tutti i nostri software gestionali possono essere collegati a un database SQL Server, consentendo l’accesso…

5 giorni ago

Come iniziare ad usare MerciGest in 5 minuti

MerciGest è semplice e immediato: basta scaricare e installare il programma per iniziare subito. Al…

1 settimana ago

Cos’è MerciGest e a chi serve

MerciGest è un gestionale di magazzino per Windows pensato per negozi, piccole imprese e artigiani…

1 settimana ago

Introduzione alla Standard Template Library (STL)

La Standard Template Library (STL) è una delle componenti più potenti del C++. Fornisce una…

7 mesi ago

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

2 anni ago