Comment éviter le scintillement lors de la gestion de WM_ERASEBKGND dans la boîte de dialogue Windows

J'ai une boîte de dialogue qui redimensionne. Il dispose également d'un arrière-plan personnalisé que je peins en réponse à une WM_ERASEBKGND appel (actuellement, un simple appel à FillSolidRect).

Lorsque la boîte de dialogue est redimensionnée, il est formidable de scintillement passe. Pour essayer de réduire le scintillement je énumérer toutes les fenêtres enfants et les ajouter à la zone de découpage. Qui semble aider un peu, maintenant que le scintillement est surtout évident dans tous les contrôles enfants comme ils le repeindre.

Comment puis-je faire la boîte de dialogue de scintillement lors du redimensionnement? Je soupçonne une double mémoire tampon doit jouer un rôle, mais je ne suis pas sûr de savoir comment le faire avec une boîte de dialogue avec des enfants contrôles (sans faire tous les contrôles enfants dessin propriétaire ou quelque chose comme ça).

Je dois souligner que je suis à l'aide de C++ (pas d' .NET), et le MFC, bien que pur Win32 solutions sont les bienvenus 🙂

REMARQUE: Une chose que j'ai essayé, mais qui n'a pas fonctionné (je ne sais pas pourquoi) a:

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.FillSolidRect(rect, backgroundColor);

pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);

source d'informationauteur DougN