juste vouloir repeindre l'arrière-plan, pas n'importe quelle partie de la zone client.Comment juste invalider l'arrière-plan de la fenêtre, pas de pixel de la zone client?
Répondre
Vous ne pouvez pas. L'arrière-plan est peint dans la zone enfant de la fenêtre. Si la fenêtre utilise des contrôles enfants pour dessiner des objets (dans sa zone client), vous pouvez utiliser le style WS_CLIPCHILDREN pour vous assurer que la peinture d'arrière-plan de la fenêtre parent ne recouvre pas les enfants.
Vous auriez besoin de peindre juste la zone relevent dans la fenêtre parent cependant, tout appel de type InvalidateRect provoquera des fenêtres enfant qui se chevauchent repeints quel que soit.
avoir un essai avec WM_ERASEBKGND.
Exemple:
HDC hDC = GetDCEx(hWnd, NULL, DCX_CLIPCHILDREN | DCX_CACHE);
SendMessage(WM_ERASEBKGND, (WPARAM)hDC, 0);
envoyer un message va le repeindre maintenant, comment puis-je l'invalider, ne pas le peindre maintenant? – lovespring
Vous pouvez invalider le formulaire entier ou un rectangle de celui-ci, je ne suis pas au courant de toutes les méthodes d'invalider seulement l'arrière-plan du formulaire. –
Quand vous dites "pas pixels du client" zone, je suppose que vous voulez invalider la zone non-client? Si c'est le cas, essayez d'utiliser la fonction SetWindowPos()
avec les indicateurs SWP_NOMOVE | SWP_NOSIZE | SWP_DRAWFRAME
.
Vous devez spécifier plus de détails dans le contexte de la question, pas seulement avec les balises. Je suppose que vous avez une fenêtre de fond et une fenêtre de premier plan, vous voulez que l'arrière-plan soit repeint, mais pas le premier plan. – CashCow
Non, pas deux fenêtres. chaque fenêtre de win32 a un arrière-plan (background brush/wm_ereasebackground) et une zone client. – lovespring