windows user-interface mfc window gdi

windows - GDI SetWindowRgn es extremadamente lento para formas de ventanas complejas



user-interface mfc (0)

Nuestra aplicación crea una ventana de superposición de una forma personalizada utilizando la API SetWindowRgn() en su función OnPaint() . Esta ventana de región solo tiene un área de cliente. También tiene una ventana de propietario que es una ventana rectangular regular.

Hemos observado que, a veces, la llamada a SetWindowRgn() en OnPaint() tarda mucho en volverse si la forma de la región es compleja, por ejemplo, si la región de la ventana es un texto o un diseño complejo. Incluso la ventana debajo de esta ventana de región se renderiza lentamente. Esto ocurre principalmente al cambiar el tamaño de la vista. Lo que hemos encontrado es que se llama a OnNcCalcSize() desde SetWindowRgn() y que el manejo predeterminado de OnNcCalcSize() tarda mucho tiempo en regresar. Además, en algunas máquinas, la pintura de la ventana debajo de la ventana de la región es muy lenta.

¿Por qué la representación de una ventana de región se vuelve lenta para formas complejas? ¿Podemos hacerlo más rápido mediante el manejo personalizado de eventos como OnNcCalcSize() u otros eventos?

NOTA: No sugiera usar una ventana en capas, ya que una limitación técnica nos ha obligado a usar una ventana de región.