GDI SetWindowRgn est extrêmement lent pour les formes de fenêtres complexes

Notre application crée une fenêtre de superposition d’une forme personnalisée à l’aide de l’API SetWindowRgn() dans sa fonction OnPaint() . Cette fenêtre de région ne comporte qu’une zone client. Il a également une fenêtre propriétaire qui est une fenêtre rectangular régulière.

Nous avons observé que l’appel de SetWindowRgn() dans OnPaint() prend parfois du temps à revenir si la forme de la région est complexe, par exemple si la région de la fenêtre est un texte ou une conception complexe. Même la fenêtre au-dessous de cette fenêtre de région devient lente. Cela se produit principalement lors du redimensionnement de la vue. Ce que nous avons trouvé, c’est que OnNcCalcSize() est appelé depuis SetWindowRgn() et que la gestion par défaut de OnNcCalcSize() prend beaucoup de temps pour revenir. De plus, sur certaines machines, la peinture de la fenêtre sous la fenêtre de la région est très lente.

Pourquoi le rendu d’une fenêtre de région devient-il lent pour les formes complexes? Pouvons-nous accélérer le OnNcCalcSize() gérant les événements comme OnNcCalcSize() ou d’autres événements?

REMARQUE: Veuillez ne pas suggérer d’utiliser une fenêtre en couches, car une limitation technique nous a obligés à utiliser une fenêtre de région.