Dessiner en dehors de WM_PAINT

cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 5 mars 2005 à 09:42
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 6 mars 2005 à 09:20
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...

2 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mars 2005 à 11:53
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
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
6 mars 2005 à 09:20
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...
0
Rejoignez-nous