Question

Y a-t-il une fonction qui gèlera la réintention de repeindre pendant un certain temps, pendant que je modifie la disposition de ma boîte de dialogue?

Était-ce utile?

La solution

Si vous constatez que vous devez réellement le faire, vous devez envoyer la fenêtre un WM_SETREDRAW message avec le wParam réglé sur false. Cela indique que la fenêtre ne doit pas être redessinée après la modification de son contenu.

Lorsque vous souhaitez réactiver le dessin, envoyez un autre WM_SETREDRAW message, cette fois avec le wParam réglé sur true.

Exemple de code:

// Disable window updates
SendMessage(hWnd, WM_SETREDRAW, FALSE, 0);

// Perform your layout here
// ...

// Re-enable window updates
SendMessage(hWnd, WM_SETREDRAW, TRUE, 0);

Pour plus d'informations, L'article de blog de Raymond Chen sur le sujet est une excellente lecture.

Autres conseils

Vous devriez faire le repositionnement en un seul swoop; utilisation Begindeferwindowpos et al.

La façon dont Windows peint est que le système publie votre fenêtre WM_PAINT Messages vous demandant de peindre. Vous pouvez choisir d'ignorer ces messages si vous le souhaitez, pendant que vous modifiez la disposition, puis forcer un cycle de peinture une fois que vous avez terminé la modification de la disposition.

Cependant, mon expérience de l'interface utilisateur sur les fenêtres est que vous n'avez généralement pas besoin de prendre de telles mesures. Étant donné que vous êtes chargé de pomper votre file d'attente de messages, si la fenêtre est actualisée pendant que vous êtes en train de modifier la mise en page, vous devez avoir pris des mesures qui ont conduit à la file d'attente de messages.

En termes simples, arrêtez de pomper la file d'attente tout en modifiant la disposition et vos problèmes disparaîtront.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top