cs_Win32
Messages postés18Date d'inscriptiondimanche 16 juin 2002StatutMembreDernière intervention 8 novembre 2003
-
25 juin 2003 à 11:55
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 2009
-
25 juin 2003 à 14:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 25 juin 2003 à 14:05
Faux !
Si je fais InvalidateRect(...,FALSE) ai lieu de InvalidateRect(...,TRUE)
alors il n'efface pas !
cs_Win32
Messages postés18Date d'inscriptiondimanche 16 juin 2002StatutMembreDernière intervention 8 novembre 2003 25 juin 2003 à 12:41
Attention, InvalidateRect n'est pas super comme fonction, parce qu'elle efface tout avant que tu ne réaffiche tes lignes, donc il y a un moment ou rien n'est affiché dans la zone cliente de la fenêtre, d'où le problème de scintillement.
cs_Win32
Messages postés18Date d'inscriptiondimanche 16 juin 2002StatutMembreDernière intervention 8 novembre 2003 25 juin 2003 à 12:08
Excuse moi pour le premier code, j'ai malencontreusement ajouter le commentaire avant qu'il soit complet...
cs_Win32
Messages postés18Date d'inscriptiondimanche 16 juin 2002StatutMembreDernière intervention 8 novembre 2003 25 juin 2003 à 12:06
Ce qui donne, en plus clair, la gection du message WM_PAINT suivante :
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
HPEN hPen;
char buf[256],buf2[256];
int len;
hdc = BeginPaint (hwnd, &ps);
// le pinceau
hPen = CreatePen(PS_DOT,1,RGB(0,0,0));
// autres:
// PS_DASH
// PS_DASHDOT
// PS_DASHDOTDOT
//
RECT rect;
HBITMAP hBmp = CreateCompatibleBitmap(hdc, rect.right, rect.bottom);
HDC hMemDC = CreateCompatibleDC(hdc);
SelectObject(hMemDC, hBmp);
SelectObject(hMemDC,hPen);
// on trace les axes
/*
SetROP2(hdc,R2_WHITE);
*/
line(hMemDC,cxMouse,0,cxMouse,cyClient);
line(hMemDC,0,cyMouse,cxClient,cyMouse);
// on formate les textes
len = sprintf(buf,"( %d / %d , %d / %d )",cxMouse,cxClient,cyMouse,cyClient);
// pour le titre de la fentre
strcpy(buf2,"Coordonnees de la souris : ");
strcat(buf2,buf);
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 25 juin 2003 à 12:03
HEU... les bitmaps sont stockes ou en memoire ????
Parceque si c'est dans la RAM, je ne veut pas programmer des chose qui demande plein de memoire pour rien !
Il me suffit juste ai lieu de faire "InvalidateRect(hwnd,NULL,TRUE);" cacluler les bons rectangles !!!
cs_Win32
Messages postés18Date d'inscriptiondimanche 16 juin 2002StatutMembreDernière intervention 8 novembre 2003 25 juin 2003 à 11:57
Ce qui donne, en plus clair, la gection du message WM_PAINT suivante :
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
HPEN hPen;
SelectObject(hdc,hPen);
// on trace les axes
/*
SetROP2(hdc,R2_WHITE);
*/
line(hdc,cxMouse,0,cxMouse,cyClient);
line(hdc,0,cyMouse,cxClient,cyMouse);
// on formate les textes
len = sprintf(buf,"( %d / %d , %d / %d )",cxMouse,cxClient,cyMouse,cyClient);
// pour le titre de la fentre
strcpy(buf2,"Coordonnees de la souris : ");
strcat(buf2,buf);
// on dessine !
TextOut(hdc,cxMouse+1,cyMouse+1,buf,len);
SetWindowText(hwnd,buf2);
DeleteObject(hPen);
EndPaint (hwnd, &ps) ;
return 0 ;
}
cs_Win32
Messages postés18Date d'inscriptiondimanche 16 juin 2002StatutMembreDernière intervention 8 novembre 2003 25 juin 2003 à 11:55
Pour éviter l'effet de scintillement, tu dvrais créer un bitmap de la taille de la zone cliente de la fenêtre avec la fonction CreateBitmap, puis créer un contexte de périphérique compatible avec celui de la zone cliente de la fenêtre, avec la fonction CreateCompatibleDC, sélectioner ce bitmap su ce nouveau contexte de périphérique, avec la fonction SelectObject, dessiner (le texte et les pointillés) sur ce nouveau contexte de périphérique, et copier ce contexte de périphérique sur celui de la fenêtre, avec la fonction BitBlt...
25 juin 2003 à 14:05
Si je fais InvalidateRect(...,FALSE) ai lieu de InvalidateRect(...,TRUE)
alors il n'efface pas !
25 juin 2003 à 12:41
25 juin 2003 à 12:08
25 juin 2003 à 12:06
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
HPEN hPen;
char buf[256],buf2[256];
int len;
hdc = BeginPaint (hwnd, &ps);
// le pinceau
hPen = CreatePen(PS_DOT,1,RGB(0,0,0));
// autres:
// PS_DASH
// PS_DASHDOT
// PS_DASHDOTDOT
//
RECT rect;
HBITMAP hBmp = CreateCompatibleBitmap(hdc, rect.right, rect.bottom);
HDC hMemDC = CreateCompatibleDC(hdc);
SelectObject(hMemDC, hBmp);
SelectObject(hMemDC,hPen);
// on trace les axes
/*
SetROP2(hdc,R2_WHITE);
*/
line(hMemDC,cxMouse,0,cxMouse,cyClient);
line(hMemDC,0,cyMouse,cxClient,cyMouse);
// on formate les textes
len = sprintf(buf,"( %d / %d , %d / %d )",cxMouse,cxClient,cyMouse,cyClient);
// pour le titre de la fentre
strcpy(buf2,"Coordonnees de la souris : ");
strcat(buf2,buf);
// on dessine !
TextOut(hMemDC,cxMouse+1,cyMouse+1,buf,len);
BitBlt(hdc, 0, 0, rect.right, rect.bottom, hMemDC, 0, 0, SRCCOPY);
SetWindowText(hwnd,buf2);
DeleteObject(hPen);
DeleteObject(hBmp);
DeleteDC(hMemDC);
EndPaint (hwnd, &ps) ;
return 0 ;
}
VOILA !!!
25 juin 2003 à 12:03
Parceque si c'est dans la RAM, je ne veut pas programmer des chose qui demande plein de memoire pour rien !
Il me suffit juste ai lieu de faire "InvalidateRect(hwnd,NULL,TRUE);" cacluler les bons rectangles !!!
25 juin 2003 à 11:57
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
HPEN hPen;
char buf[256],buf2[256];
int len;
hdc = BeginPaint (hwnd, &ps);
// le pinceau
hPen = CreatePen(PS_DOT,1,RGB(0,0,0));
// autres:
// PS_DASH
// PS_DASHDOT
// PS_DASHDOTDOT
//
SelectObject(hdc,hPen);
// on trace les axes
/*
SetROP2(hdc,R2_WHITE);
*/
line(hdc,cxMouse,0,cxMouse,cyClient);
line(hdc,0,cyMouse,cxClient,cyMouse);
// on formate les textes
len = sprintf(buf,"( %d / %d , %d / %d )",cxMouse,cxClient,cyMouse,cyClient);
// pour le titre de la fentre
strcpy(buf2,"Coordonnees de la souris : ");
strcat(buf2,buf);
// on dessine !
TextOut(hdc,cxMouse+1,cyMouse+1,buf,len);
SetWindowText(hwnd,buf2);
DeleteObject(hPen);
EndPaint (hwnd, &ps) ;
return 0 ;
}
25 juin 2003 à 11:55