Можно ли перегружать из одного DC, созданного CreateCompatibleDC, в другой такой же? Что-то вроде промежуточного DC. Если можно, то почему такая штука не работает? Код (Text): ShowBitmap proc hDC:DWORD LOCAL bi :BITMAP LOCAL Rct :RECT LOCAL memDC :DWORD LOCAL tmpDC :DWORD LOCAL tmpBmp :DWORD LOCAL screenDC :DWORD LOCAL xSrc,ySrc :DWORD LOCAL xDest,yDest,wDest,hDest :DWORD invoke GetObject,hCurrBmp,sizeof BITMAP,ADDR bi .if (!hDC) mov screenDC,FUNC(GetDC,hScreen) .else m2m screenDC,hDC .endif mov memDC,FUNC(CreateCompatibleDC,screenDC) mov tmpDC,FUNC(CreateCompatibleDC,memDC) mov tmpBmp,FUNC(CreateCompatibleBitmap,tmpDC,screen_w,screen_h) invoke SelectObject,tmpDC,tmpBmp invoke SelectObject,memDC,hCurrBmp mov eax,screen_w .if eax < bi.bmWidth mov xDest,0 m2m wDest,screen_w .else m2m wDest,bi.bmWidth sub eax,bi.bmWidth shr eax,1 mov xDest,eax .endif mov eax,screen_h .if eax < bi.bmHeight mov yDest,0 m2m hDest,screen_h .else m2m hDest,bi.bmHeight sub eax,bi.bmHeight shr eax,1 mov yDest,eax .endif invoke BitBlt,tmpDC,xDest,yDest,wDest,hDest,memDC,0,0,SRCCOPY invoke BitBlt,screenDC,0,0,screen_w,screen_h,tmpDC,0,0,SRCCOPY invoke DeleteDC,memDC invoke DeleteDC,tmpDC invoke DeleteObject,tmpBmp .if (!hDC) invoke ReleaseDC,hScreen,screenDC .endif P.S. Если использовать один memDC, и с него сразу на screenDC рисовать, то битмап выводится.
mov tmpDC,FUNC(CreateCompatibleDC,memDC) Логичнее так: mov tmpDC,FUNC(CreateCompatibleDC,screenDC) mov tmpBmp,FUNC(CreateCompatibleBitmap,tmpDC,screen_w,screen_h) Вместо tmpDC надо подставлять screenDC! Иначе картинка будет чёрно-белой.