SOURIS (AVEC DES POINTILLES)

cs_Win32 Messages postés 18 Date d'inscription dimanche 16 juin 2002 Statut Membre Dernière intervention 8 novembre 2003 - 25 juin 2003 à 11:55
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 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.

https://codes-sources.commentcamarche.net/source/10977-souris-avec-des-pointilles

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
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és 18 Date d'inscription dimanche 16 juin 2002 Statut Membre Derniè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és 18 Date d'inscription dimanche 16 juin 2002 Statut Membre Derniè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és 18 Date d'inscription dimanche 16 juin 2002 Statut Membre Derniè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);

// 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 !!!
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
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és 18 Date d'inscription dimanche 16 juin 2002 Statut Membre Derniè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;

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 ;
}
cs_Win32 Messages postés 18 Date d'inscription dimanche 16 juin 2002 Statut Membre Derniè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...
Rejoignez-nous