Contesti dispositivo di visualizzazione privata
Un contesto di dispositivo privato consente a un'applicazione di evitare di recuperare e inizializzare un contesto di dispositivo di visualizzazione ogni volta che l'applicazione deve disegnare in una finestra. I contesti di dispositivo privati sono utili per le finestre che richiedono molte modifiche ai valori degli attributi del contesto di dispositivo per prepararlo per il disegno. I contesti di dispositivo privati riducono il tempo necessario per preparare il contesto del dispositivo e quindi il tempo necessario per eseguire il disegno nella finestra.
Un'applicazione indirizza il sistema a creare un contesto di dispositivo privato per una finestra specificando lo stile CS_OWNDC nella classe finestra. Il sistema crea un contesto di dispositivo privato univoco ogni volta che crea una nuova finestra appartenente alla classe . Inizialmente, il contesto del dispositivo privato ha gli stessi valori predefiniti per gli attributi di un contesto di dispositivo comune, ma l'applicazione può modificarle in qualsiasi momento. Il sistema mantiene le modifiche apportate al contesto di dispositivo per la durata della finestra o fino a quando l'applicazione non apporta modifiche aggiuntive.
Un'applicazione può recuperare un handle nel contesto del dispositivo privato usando la funzioneGetDCin qualsiasi momento dopo la creazione della finestra. L'applicazione deve recuperare l'handle una sola volta. Successivamente, può mantenere e usare l'handle qualsiasi numero di volte. Poiché un contesto di dispositivo privato non fa parte della cache del contesto di dispositivo di visualizzazione, un'applicazione non deve mai rilasciare il contesto di dispositivo usando la funzioneReleaseDC.
Il sistema regola automaticamente il contesto del dispositivo in modo da riflettere le modifiche apportate alla finestra, ad esempio lo spostamento o il ridimensionamento. In questo modo si garantisce che tutte le finestre sovrapposte vengano sempre ritagliate correttamente; ovvero, nessuna azione è richiesta dall'applicazione per garantire il ritaglio. Tuttavia, il sistema non modifica il contesto del dispositivo in modo da includere l'area di aggiornamento. Pertanto, quando si elabora un messaggio di WM_PAINT, l'applicazione deve incorporare l'area di aggiornamento chiamando BeginPaint o recuperando l'area di aggiornamento e intersecandola con l'area di ritaglio corrente. Se l'applicazione non chiama BeginPaint, deve convalidare in modo esplicito l'area di aggiornamento usando la funzione ValidateRect o ValidateRgn. Se l'applicazione non convalida l'area di aggiornamento, la finestra riceve una serie infinita di messaggi di WM_PAINT.
Poiché BeginPaint nasconde il cursore se viene visualizzata una finestra, un'applicazione che chiama BeginPaint deve chiamare anche la funzione EndPaint per ripristinare il cursore. EndPaint non ha altri effetti su un contesto di dispositivo privato.
Anche se un contesto di dispositivo privato è comodo da usare, è un uso intensivo della memoria in termini di risorse di sistema, che richiede 800 o più byte per archiviare. I contesti di dispositivo privati sono consigliati quando le considerazioni sulle prestazioni superano i costi di archiviazione.
Il sistema include il contesto del dispositivo privato quando si invia il messaggio di WM_ERASEBKGND all'applicazione. Le selezioni correnti del contesto del dispositivo privato, inclusa la modalità di mapping, sono effettive quando l'applicazione o il sistema elabora questi messaggi. Per evitare effetti indesiderati, il sistema utilizza coordinate logiche durante la cancellazione dello sfondo; Ad esempio, usa la funzione GetClipBox per recuperare le coordinate logiche dell'area per cancellare e passare queste coordinate alla funzione FillRect. Le applicazioni che elaborano questi messaggi possono usare tecniche simili.
Un'applicazione può usare la funzioneGetDCExper forzare il sistema a restituire un contesto di dispositivo comune per la finestra con un contesto di dispositivo privato. Ciò è utile per eseguire ritocchi rapidi in una finestra senza modificare i valori correnti degli attributi del contesto di dispositivo privato.