cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 2010
-
5 mars 2005 à 09:42
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDerniè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.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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é.