Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WM_SIZE et WM_SIZING

4 réponses
Avatar
Michel
Boujour =E0 tous.
J'aimerais avoir un confirmation (ou une infirmation...) : un message
WM_SIZE est-il toujours pr=E9c=E9d=E9 d'un message WM_SIZING et un message
WM_SIZING est-il toujours suivi d'un message WM_SIZE ?
Sinon, dans quel cas un message WM_SIZE ou WM_SIZING est-il envoy=E9 ?
(Evidement je ne parle pas des cas ou le programme envoie de tels
messages en interne.)

Je me permet de critiquer la documentation officielle qui est peu
bavarde sur le sujet :
"The WM_SIZE message is sent to a window after its size has changed."
"The WM_SIZING message is sent to a window that the user is resizing."

4 réponses

Avatar
Christian ASTOR
Michel wrote:

Boujour à tous.
J'aimerais avoir un confirmation (ou une infirmation...) : un message
WM_SIZE est-il toujours précédé d'un message WM_SIZING et un message
WM_SIZING est-il toujours suivi d'un message WM_SIZE ?
Sinon, dans quel cas un message WM_SIZE ou WM_SIZING est-il envoyé ?
(Evidement je ne parle pas des cas ou le programme envoie de tels
messages en interne.)

Je me permet de critiquer la documentation officielle qui est peu
bavarde sur le sujet :
"The WM_SIZE message is sent to a window after its size has changed."
"The WM_SIZING message is sent to a window that the user is resizing."



La doc est correcte.
WM_SIZING, c'est par intervention de l'utilisateur, notamment si
WS_THICKFRAME est présent.
Si on change la taille avec MoveWindow() par ex, on n'aura que WM_SIZE.
Si la taille ne change pas après WM_SIZING, il n'y aura pas de WM_SIZE.
Avatar
Michel
On 22 juin, 01:58, Christian ASTOR wrote:
Michel wrote:
> Boujour à tous.
> J'aimerais avoir un confirmation (ou une infirmation...) : un message
> WM_SIZE est-il toujours précédé d'un message WM_SIZING et un mess age
> WM_SIZING est-il toujours suivi d'un message WM_SIZE ?
> Sinon, dans quel cas un message WM_SIZE ou WM_SIZING est-il envoyé ?
> (Evidement je ne parle pas des cas ou le programme envoie de tels
> messages en interne.)

> Je me permet de critiquer la documentation officielle qui est peu
> bavarde sur le sujet :
> "The WM_SIZE message is sent to a window after its size has changed."
> "The WM_SIZING message is sent to a window that the user is resizing."

La doc est correcte.
WM_SIZING, c'est par intervention de l'utilisateur, notamment si
WS_THICKFRAME est présent.
Si on change la taille avec MoveWindow() par ex, on n'aura que WM_SIZE.
Si la taille ne change pas après WM_SIZING, il n'y aura pas de WM_SIZE.



Ok merci.
Le problème c'est que lors d'un redimentionnement, la fenêtre sera
affichée avant l'envoi du WM_SIZE, donc pour éviter les effets
désagréables, le programme doit rafraichir le contenu de sa fenêtre
lors de l'envoi du message WM_SIZING. Mais ce message n'est pas envoyé
dans tous les cas.
Donc j'en déduit soit qu'il y a un message qui est envoyé à chaque
redimentionnement avant l'affichage, soit que dans ces cas là la
fenêtre n'est pas réaffichée avant l'envoi du message WM_SIZE.
Avatar
Christian ASTOR
Michel wrote:

Ok merci.
Le problème c'est que lors d'un redimentionnement, la fenêtre sera
affichée avant l'envoi du WM_SIZE, donc pour éviter les effets
désagréables, le programme doit rafraichir le contenu de sa fenêtre
lors de l'envoi du message WM_SIZING. Mais ce message n'est pas envoyé
dans tous les cas.



Non, c'est bien dans WM_SIZE que l'on retaille, s'il y en a besoin, les
fenêtre filles (par défaut, on ne fait rien)
C'est la partie non cliente (WM_NCPAINT) qui est affichée avant.
Les effets désagréables (flickering), viennent éventuellement de
WM_ERASEBKGND.
Avatar
Michel
On 22 juin, 11:13, Christian ASTOR wrote:
Michel wrote:
> Ok merci.
> Le problème c'est que lors d'un redimentionnement, la fenêtre sera
> affichée avant l'envoi du WM_SIZE, donc pour éviter les effets
> désagréables, le programme doit rafraichir le contenu de sa fenêt re
> lors de l'envoi du message WM_SIZING. Mais ce message n'est pas envoy é
> dans tous les cas.

Non, c'est bien dans WM_SIZE que l'on retaille, s'il y en a besoin, les
fenêtre filles (par défaut, on ne fait rien)
C'est la partie non cliente (WM_NCPAINT) qui est affichée avant.
Les effets désagréables (flickering), viennent éventuellement de
WM_ERASEBKGND.



Je ne parle pas du flickering, mais j'avais remarqué que lorsqu'on
n'update pas le contenu de la fenêtre (un bitmap par exemple) lors du
WM_SIZING et que l'utilisateur redimentionne avec la barre de
redimentionnement gauche ou haut, on distingue l'ancien bitmap (parce
qu'il a une taille inadéquate et donc qu'il est déplacé plutot
qu'agrandit).
Il se trouve que je m'occupe en effet de fenêtre filles.
Je vais donc voir si je retrouve ce problème (normalement non
donc).Merci