Disegno senza il messaggio di WM_PAINT

Anche se le applicazioni eseguono la maggior parte delle operazioni di disegno durante l'elaborazione del messaggio WM_PAINT , è talvolta più efficiente per un'applicazione di disegnare direttamente in una finestra senza basarsi sul messaggio WM_PAINT . Ciò può essere utile quando l'utente necessita di commenti e suggerimenti immediati, ad esempio quando si seleziona il testo e si trascina o si ridimensiona un oggetto. In questi casi, l'applicazione di solito disegna durante l'elaborazione dei messaggi della tastiera o del mouse.

Per disegnare in una finestra senza usare un messaggio di WM_PAINT , l'applicazione usa la funzione GetDC oGetDCEx per recuperare un contesto di dispositivo di visualizzazione per la finestra. Con il contesto del dispositivo di visualizzazione, l'applicazione può disegnare nella finestra ed evitare l'intrusione in altre finestre. Al termine del disegno, l'applicazione chiama la funzione ReleaseDC per rilasciare il contesto del dispositivo di visualizzazione da usare da altre applicazioni.

Quando si disegna senza utilizzare un messaggio di WM_PAINT , l'applicazione in genere non invalida la finestra. Al contrario, disegna in modo tale che possa facilmente ripristinare la finestra e rimuovere il disegno. Ad esempio, quando l'utente seleziona testo o un oggetto, l'applicazione disegna in genere la selezione invertendo qualsiasi elemento già presente nella finestra. L'applicazione può rimuovere la selezione e ripristinare il contenuto originale della finestra semplicemente invertendo di nuovo.

L'applicazione è responsabile della gestione attenta delle modifiche apportate alla finestra. In particolare, se un'applicazione disegna una selezione e si verifica un WM_PAINT messaggio, l'applicazione deve assicurarsi che qualsiasi disegno eseguito durante il messaggio non corrompa la selezione. Per evitare questo problema, molte applicazioni rimuovono la selezione, eseguono le normali operazioni di disegno e quindi ripristinano la selezione al termine del disegno.