BitBlt me fait chier

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 3 juil. 2004 à 22:35
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 4 juil. 2004 à 20:51
J'ai crée un projet par défaut avec vs.
Les seuls trucs que j'ai fait sont créer un HDC hdc2 en variable globale, et dans le WM_PAINT j'ai mis:

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
hdc2 = CreateCompatibleDC(0); // ou CreateCompatibleDC(hdc); pareil
FloodFill(hdc2, 0, 0, 0);
BitBlt(hdc, 100, 100, 16, 16, hdc2, 0, 0, SRCCOPY);
DeleteDC(hdc2);

// TODO : ajoutez ici le code de dessin...
EndPaint(hWnd, &ps);
break;


Normalement il devrait y avoir un carré noir à l'écran, mais ca n'est pas le cas. Je n'y comprends rien.
Merci de venir à mon secours

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 juil. 2004 à 23:10
Emploie donc ExtFloodFill au lieu des antiquites issues du 16 bits.
Et ne va pas nous faire un ulcere.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
3 juil. 2004 à 23:23
Un truc que je ne comprends pas :
donc hdc2 c'est pas un DC memoire ? car tu n'a pas selectionne de bitmap, or normalement pour les BitBlt, cet fonction opere sur les bitmaps selectionnees, non ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 juil. 2004 à 23:35
C'est vrai JCDjcd, il faut lui séléctionner une bitmap et ca marche. J'avais pas compris à quoi ca servait, voila qui est fait.
0
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
4 juil. 2004 à 20:22
moi j'ai créé un hdc mémoire

hdcWindow = BeginPaint(hwnd, &ps);
hdcMemory = CreateCompatibleDC(hdcWindow);
SelectObject(hdcMemory, htopmask);
BitBlt(hdcWindow,0,0,height,width, hdcMemory, 0, 0, SRCAND);
SelectObject(hdcMemory, htop);
BitBlt(hdcWindow,0,0,height,width, hdcMemory, 0, 0, SRCPAINT);
DeleteDC(hdcMemory);
EndPaint(hwnd, &ps);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
4 juil. 2004 à 20:51
il faut deselectionner des bitmaps dans le DC memoire
et sinon ce qui est bien de faire c'est un back buffer, i.e. que tu fais TOUTES tes operations sur les bitmaps dans un autre DC memoire, et a la fin du blite, comme ca le rendu visuel sera mieux, car la il peut y avoir des clignotements.
0
Rejoignez-nous