WinAPI osobny obszar dorysowania ekranu.
Ostatnio zmodyfikowano 2015-10-22 15:05
andros705 Temat założony przez niniejszego użytkownika |
WinAPI osobny obszar dorysowania ekranu. » 2015-10-19 14:18:27 Jeżeli ktoś programował z pomocą SDL zna coś takiego jak SDL_Surface Kiedy programowalnej w SDL to robiłem coś takiego że na kopi SDL_Surface rysowałem a potem przenosiłem obraz z kopi na ekran jak była potrzeba.
Moje pytanie jest jak to zrobić na Windowsie?
Próbowałem już coś takiego że brałem dwa HDC jeden oryginalny i robiłem kopie CreateCompatibleDC() potem próbowałem rysować Rectangle() po mojej kopi ale gdy chciałem ją przenieść na oryginalny HDC to nie widziałem swoich kwadratów. Co robie nie tak? |
|
Lora |
» 2015-10-19 21:24:13 Animacja Poczytaj tutaj o podwójnym buforowaniu - działanie jest bardzo podobne. Moje pytanie jest jak to zrobić na Windowsie? |
A SDL nie działa na Windowsie? Skąd mamy wiedzieć, skoro nie wkleiłeś żadnego kodu? |
|
andros705 Temat założony przez niniejszego użytkownika |
Rozumiem że bez kody nic wydedukować nie umiecie ;) » 2015-10-19 21:52:20 static HDC screen; switch(Message) { case WM_CREATE:{ HDC hdc = GetDC(hwnd); screen = CreateCompatibleDC(hdc); <= Tutaj sobie robię kopię HDC ReleaseDC(hwnd,hdc); RECT rect; GetClientRect(hwnd,&rect); SelectObject(screen, GetStockObject(DC_PEN)); SelectObject(screen, GetStockObject(DC_BRUSH)); SetDCPenColor(screen,RGB(0,143,140)); SetDCBrushColor(screen,RGB(0,143,140)); Rectangle(screen,40,40,rect.right-40,rect.bottom-40); <= Maluję takie sobie kwadrato break; } case WM_PAINT:{ RECT pRect; if(GetUpdateRect(hwnd,&pRect,TRUE)){ PAINTSTRUCT pStruct; HDC hdc = BeginPaint(hwnd,&pStruct); RECT rect; GetClientRect(hwnd,&rect); BitBlt(hdc,0,0,rect.right,rect.bottom,screen,0,0,SRCCOPY); <= Tutaj chcę skopiować zawartość screen na ekran. EndPaint(hwnd,&pStruct); } break; }
Po tym na ekranie nie pojawia się mój kwadrat :(
Nie korzystam z SDL bo chcę korzystać z WinAPI, nie potrzebuję implementować SDL do małych aplikacji. |
|
andros705 Temat założony przez niniejszego użytkownika |
Rozwiązane » 2015-10-22 15:05:58 Oto rozwiązanie mojego problemu:
HANDLE bufferBitmap; HDC buffer;
WM_CREATE:{ RECT rect; GetClientRect(hwnd,&rect); HDC hdc = GetDC(hwnd); buffer = CreateCompatibleDC(hdc); bufferBitmap = CreateCompatibleBitmap(hdc,rect.right,rect.bottom); ReleaseDC(hdc); }
Teraz mogę malować po buffer. |
|
« 1 » |