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

Un Abbonamento per Tutti i Software

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

11 mesi ago

Software di Magazzino Gratuito

MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→

11 mesi ago

Mettere il PC in Lock Screen

In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…

3 anni ago

Fare il reset togliendo la corrente

In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…

3 anni ago

Prossimi Aggiornamenti Software

Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…

3 anni ago

Come Eliminare i Files in Windows

Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→

3 anni ago