Contextos de dispositivo de visualización privada
Un contexto de dispositivo privado permite a una aplicación evitar recuperar e inicializar un contexto de dispositivo de visualización cada vez que la aplicación debe dibujar en una ventana. Los contextos de dispositivo privado son útiles para ventanas que requieren muchos cambios en los valores de los atributos del contexto del dispositivo para prepararlo para dibujar. Los contextos de dispositivo privado reducen el tiempo necesario para preparar el contexto del dispositivo y, por lo tanto, el tiempo necesario para llevar a cabo el dibujo en la ventana.
Una aplicación dirige al sistema para crear un contexto de dispositivo privado para una ventana especificando el estilo CS_OWNDC en la clase de ventana. El sistema crea un contexto de dispositivo privado único cada vez que crea una nueva ventana que pertenece a la clase . Inicialmente, el contexto del dispositivo privado tiene los mismos valores predeterminados para los atributos que un contexto de dispositivo común, pero la aplicación puede modificarlos en cualquier momento. El sistema conserva los cambios en el contexto del dispositivo durante la vida útil de la ventana o hasta que la aplicación realiza cambios adicionales.
Una aplicación puede recuperar un identificador para el contexto del dispositivo privado mediante la función GetDC en cualquier momento después de crear la ventana. La aplicación solo debe recuperar el identificador una vez. A partir de entonces, puede mantener y usar el identificador cualquier número de veces. Dado que un contexto de dispositivo privado no forma parte de la caché de contexto del dispositivo para mostrar, una aplicación nunca debe liberar el contexto del dispositivo mediante la función ReleaseDC .
El sistema ajusta automáticamente el contexto del dispositivo para reflejar los cambios en la ventana, como mover o ajustar el tamaño. Esto garantiza que las ventanas superpuestas siempre se recortan correctamente; es decir, la aplicación no requiere ninguna acción para garantizar el recorte. Sin embargo, el sistema no revisa el contexto del dispositivo para incluir la región de actualización. Por lo tanto, al procesar un mensaje de WM_PAINT , la aplicación debe incorporar la región de actualización llamando a BeginPaint o recuperando la región de actualización y intersecándola con la región de recorte actual. Si la aplicación no llama a BeginPaint, debe validar explícitamente la región de actualización mediante la función ValidateRect o ValidateRgn . Si la aplicación no valida la región de actualización, la ventana recibe una serie infinita de mensajes de WM_PAINT .
Dado que BeginPaint oculta el símbolo de intercalación si una ventana la muestra, una aplicación que llama a BeginPaint también debe llamar a la función EndPaint para restaurar el símbolo de intercalación. EndPaint no tiene ningún otro efecto en un contexto de dispositivo privado.
Aunque un contexto de dispositivo privado es cómodo de usar, es intensivo en memoria en términos de recursos del sistema, lo que requiere 800 o más bytes para almacenar. Se recomiendan contextos de dispositivo privado cuando las consideraciones de rendimiento superan los costos de almacenamiento.
El sistema incluye el contexto del dispositivo privado al enviar el mensaje WM_ERASEBKGND a la aplicación. Las selecciones actuales del contexto del dispositivo privado, incluido el modo de asignación, están en vigor cuando la aplicación o el sistema procesan estos mensajes. Para evitar efectos no deseados, el sistema utiliza coordenadas lógicas al borrar el fondo; por ejemplo, usa la función GetClipBox para recuperar las coordenadas lógicas del área para borrar y pasar estas coordenadas a la función FillRect . Las aplicaciones que procesan estos mensajes pueden usar técnicas similares.
Una aplicación puede usar la función GetDCEx para forzar al sistema a devolver un contexto de dispositivo común para la ventana que tiene un contexto de dispositivo privado. Esto es útil para llevar a cabo retoques rápidos en una ventana sin cambiar los valores actuales de los atributos del contexto del dispositivo privado.