BitBlt me fait chier

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
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 ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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.
Messages postés
220
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
7 avril 2007

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