Consideraciones de rendimiento y procedimientos recomendados
En este tema se presenta un conjunto de procedimientos recomendados para usar las API del Administrador de ventanas de escritorio (DWM).
Este tema contiene las siguientes secciones:
- Prácticas de aplicación para DWM
- Procedimientos de dibujo para DWM
- Región de cliente Blur-Behind DWM
Prácticas de aplicación para DWM
Si la aplicación controla el escalado de puntos por pulgada (ppp), puede declarar una aplicación como compatible con ppp y evitar el escalado automático estableciendo la marca compatible con ppp en el manifiesto del programa o llamando a la función SetProcessDPIAware durante la inicialización del programa.
Con la composición DWM activada, las aplicaciones ocultas ya no reciben mensajes WM_PAINT y no se les pide que vuelvan a representarse. El contenido de cada ventana ya está disponible para componer la imagen de pantalla.
Las ventanas de WS_EX_TRANSPARENT de nivel superior deben combinarse con un estilo de WS_EX_LAYERED para los fines de las pruebas de posicionamiento. WS_EX_TRANSPARENT en el sentido clásico, sin redireccionamiento, es útil para ventanas secundarias en una jerarquía de ventanas que pertenecen al mismo subproceso, pero no está pensada para ventanas de nivel superior.
Use regiones o capas para crear ventanas con forma o mezcla. Tenga en cuenta que en Windows Vista y versiones posteriores de Windows, el dibujo personalizado solo forma parte de una ventana de nivel superior no proporcionará el contenido obsoleto deseado en regiones no dibujadas.
Las API como GetDCOrgEx se pueden usar para determinar determinados valores reales. Si tiene un contexto de dispositivo (DC) para una ventana redirigida, el origen devuelto por GetDCOrgEx no coincidirá con el origen de la ventana en la pantalla. En su lugar, el origen será el origen de la superficie del búfer de reserva para la ventana: (0, 0).
Cuando se produce un error en todo lo demás, deshabilite la representación de ventanas mediante una llamada a la función DwmSetWindowAttribute .
Procedimientos de dibujo para DWM
Evite dibujar directamente en la superficie de visualización principal. Al hacerlo, el DWM deshabilitará la composición hasta que la aplicación libere la superficie del dispositivo principal.
Evalúe si la aplicación debe proporcionar su propio almacenamiento en búfer doble. DwM duplica eficazmente el contenido de los búferes y presenta la ventana en un solo marco.
Evite leer o escribir en un controlador de dominio de pantalla. Aunque es compatible con DWM, no se recomienda debido a una disminución del rendimiento.
Evite dibujar en el área que no es de cliente. Aunque la aplicación puede acceder a esta área y dibujarla es compatible con la API de Microsoft Win32, esto puede hacer que la ventana pierda cualquier borde de cristal que tenga.
Evite mezclar la interfaz de dispositivo gráfico de Windows (GDI) y Microsoft DirectX a menos que no se superpongan. Si la combinación es necesaria, dibuje el contenido de GDI en una superficie de software de DirectX y combínelas antes de redactarla en la pantalla, o bien dibujelas en ventanas independientes.
Use la función BitBlt o StretchBlt en lugar de GDI+ de Windows para presentar el dibujo para su representación. GDI+ representa una línea de examen a la vez con la representación de software. Esto puede provocar un parpadeo en las aplicaciones.
Región de cliente Blur-Behind DWM
La representación del efecto de desenfoque es una operación que consume muchos recursos para la CPU y la unidad de procesamiento de gráficos (GPU). Se insta a los desarrolladores de aplicaciones a tener en cuenta las implicaciones de usar el desenfoque del área cliente para que no consuma recursos excesivos. Debe tener especial precaución en los casos siguientes:
- Cuando se espera que el tamaño del desenfoque del área de cliente sea significativo, incluso si no se producirán actualizaciones en el propio área borrosa. El desenfoque debe representarse en caso de que se produzcan actualizaciones en el área borrosa de la ventana, lo que incurre en costos de CPU y GPU. Además, las operaciones de ventana en la ventana (mover, cambiar el tamaño o las transiciones) incurrirán en más costos.
- Cuando se esperan actualizaciones significativas en el área de cliente borrosa. Esto requerirá un reintentos del desenfoque en cada actualización y consumirá recursos excesivos.
- Si se espera que el desenfoque cubra un área significativa y también se esperen actualizaciones de esa área, se recomienda encarecidamente que no desenfoque el área de cliente.