Pb avec la fonction bitblt

cs_torsepoilu Messages postés 3 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 25 mars 2004 - 25 mars 2004 à 21:17
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 25 mars 2004 à 23:17
bonjour, depuis un moment je parcours tous les sites internet et je modifie mon code en consequence, mais cela ne marche toujours pas.

voici le code :

VOID DoPaint(HWND hwnd)
{
// dxCard et dyCard sont des variables globales

PAINTSTRUCT ps;
HDC hdc;
HDC hMemDC;
HBITMAP off;
int dwWidth, dwHeight;
RECT rTemp;

BeginPaint(hwnd, &ps);

// dimension de la zone client
dwWidth = GetDeviceCaps(hdc, HORZRES);
dwHeight = GetDeviceCaps(hdc, VERTRES);

hdc = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hdc);

// create the off buffer
off = CreateCompatibleBitmap(hdc, dwWidth, dwHeight);
SelectObject(hMemDC, off);

rTemp.top = dyCard/3;
rTemp.left = dxCard*4 + (dxCard - dyCard/3)/2;
rTemp.right = dxCard*4 + dyCard/3 + (dxCard-dyCard/3)/2;
rTemp.bottom = dyCard - dyCard/3;

DrawEdge(hMemDC,
&rTemp, BDR_RAISEDOUTER, BF_RECT);

// copie de hdc
BitBlt(hdc, //hdc destination
0, //pos x en haut a gauche pour hdc destination
0, //pos y en haut a gauche pour hdc destination
dwWidth, //largeur
dwHeight, //hauteur
hMemDC, //hdc source
0, //pos x en haut a gauche pour hdc source
0, //pos y en haut a gauche pour hdc source
SRCCOPY); //tag de copy

DeleteDC(hMemDC);


EndPaint(hwnd, &ps);
}

drawEdge ne veut pas s'afficher pourtant si je remplace hMemDC par hdc dans la fonction, il s'affiche

quelqu'un pourrait-il me conseiller?

1 réponse

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
25 mars 2004 à 23:17
dwWidth = GetDeviceCaps(hdc, HORZRES);
dwHeight = GetDeviceCaps(hdc, VERTRES);

te donne la taille de l'écran pas de la zone cliente

c'est GetClientRect() qu'il faut appeler pour savoir la zone où dessiner

ensuite fait directement
hdc = BeginPaint(hWnd, &ps);

sauvegarde également l'ancine bitmap de hMemDC :
HBITMAP hOldBmp = (HBITMAP) SelectObject(hMemDC, off);

et remet le à la fin avant de détruire hmemdc:
SelectObject(hMemDC, hOldBmp);
DeleteDC(hmemDc);
DeleteObject(off);

sinon si les pb persistent, essayent de tracer une simple ligne vers des coordonnées faible (pour être sûr quelle seront visible) pour voir si BitBlt marche.
0
Rejoignez-nous