[VC++] BitsPixel DDB

0

Witam,
otóż zastanawia mnie jedna rzecz... Zrobiłem sobie w programie podwójne buforowanie ale, no właśnie jest jedno ale :P. Chciałem żeby wszystko wyglądało mniej więcej tak ale niestety musiałem to rozwiązać w inny sposób:

hdc = BeginPaint ( hwnd , &ps ) ;
hdcMem = CreateCompatibleDC ( hdc ) ;
hBM = CreateCompatibleBitmap ( hdcMem , cx , cy ) ; // gdzie cx i cy sa pobierane z komunikatu WM_SIZE
SelectObject ( hdcMem , hBM ) ;
BitBlt ( hdc ... hdcMem ... ) ; // argumenty wiadomo jakie ale to nie jest wazne dlatego nie pisze
DeleteObject ( hBM ) ;
DeleteDC ( hdcMem ) ;
EndPaint ( ... ) ;

I wszystko niby powinno byc dobrze ale Bitmapa jest monochromatyczna, zamiast zgodna z kontekstem... W knidze Petzolda jest napisane ze bitmapa powinna miec ilosc bitow na pixel zgodna z kontekstem, czyli 32 czy tam 24 juz nie pamietam :P. W takim przypadku uchwyt bitmapy pobieram za pomoca funkcji CreateBitmap, gdzie podaje ilosc bitow na pixel a nie CreateCompatibleBitmap... Wprawdzie to nie powinienem wlasciwie tego tematu poruszac ale zastanawia mnie to czemu nie jest tak jak to jest napisane w knidze?

0

Spróbuj może tak:

hdc = BeginPaint ( hwnd , &ps ) ;
hdcMem = CreateCompatibleDC ( hdc ) ;
hBM = CreateCompatibleBitmap ( hdc , cx , cy ) ; 
SelectObject ( hdcMem , hBM ) ;
...
0

Już znalazłem rozwiązanie :). Naprawdę dziwne to, ale doczytałem się w MSDN, jeśli to kogoś interesuje oto jak wyglądała jedna z linijek:

hBM = CreateCompatibleBitmap ( hdcMem , cx , cy ) ;

a oto jak powinna wyglądać:

hBM = CreateCompatibleBitmap ( hdc , cx , cy ) ;

Tak się składa, że bitmapa utworzona na podstawie Kontekstu Pamięciowego zawsze jest monochromatyczna :P, a na podstwie Kontekstu Urządzenia jest wszystko OK :)

EDIT: O ubiegłeś mnie :) Ale widzę, że dobre rozwiązanie podałeś, dzięki za fatyge :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1