Dessiner en dehors de WM_PAINT

Signaler
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
Bonjour,



J'ai un bout de programme qui dessine sur un static le contenu d'un buffer.

Une explication vraiment grossiere.



void DoEvents()

{

while(msg)

{

PeekMessage(..);

DispatchMessage(...);

}

}





void Dessine(HWND hDlgMere, int idStatic, int iBuffer, int Taill)

{

InvalidateRectangle(GetDlgItem(idStatic, ...); // Efface le statique

DoEvents(); // Fonction qui permet de traiter les messages en attente, ici (entre autre )WM_PAINT



GetDC(idStatic);

MoveToEx(...);

for(i=0; i<Taille; i++)

{

LineTo(...);

}

ReleaseDC(...);

}



Cette fonction est appele par un message perso dans la fonction de
traitement des messages de la boite de dialog Mere (DialogProc)



case WM_USER + 1:

Dessine(hwndDlg, wParam, lParam, Taille);



En tout j'ai 4 statiques donc a chaque message, je
dessine sur le statique id=300, puis le statique id=301 puis id=302 et
id=303 puis je recommence 300 ...



Ce qui m'embete c'est le DoEvents. Car les messages WM_USER+1 arrive
rapidement donc le DoEvents peu laisser passer un WM_USER +1 alors que
je n'ai pas traité celui d'avant.

Donc, comment rafraichir (effacer) un controle (ici un statique) pour
que je puisse y dessiner dessus sans ce "DoEvents" et sans passer par
le WM_PAINT.

Est ce que m'a methode pour dessiner est la bonne (GetDC ...)



J'espere que je me suis fait comprendre car pas facile a expliquer.



Merci pour vos réponses,


Matt...
A voir également:

2 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Salut,

Après InvalidateRectangle(), tu ne peux pas mettre un UpdateWindow par exemple?

En fait je ne comprends pas pourquoi c'est toi qui appelles DoEvents,
j'ai l'habitude d'utiliser une telle boucle dans mon WinMain, et puis
après je ne m'en soucie plus, les messages sont traités dès que c'est
possible.

Par ailleurs je ne comprends pas non plus pourquoi tu veux effacer ton
static si tu redessines tout de suite par dessus, ca va l'effacer du
coup non? Si c'est non, il suffit de faire un FillRect et il est effacé.

En espérant t'avoir aidé un peu
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonjour,



Merci pour ta reponse.

Je pense qu'avec le FillRectangle je vais pouvoir m'en sortir.

Le DoEvents était pour que la fenetre se rafraichisse avant de dessiner.

Je ne maitrisse pas trop les histoires de dessin en API, il faudrait que je m'y penche un peu plus.



Bonne journée,


Matt...