Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

WinAPI osobny obszar dorysowania ekranu.

Ostatnio zmodyfikowano 2015-10-22 15:05
Autor Wiadomość
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?
P-138874
Lora
» 2015-10-19 21:24:13
» Kurs WinAPI, C++ » PodstawyAnimacja lekcja 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?

Co robie nie tak?
Skąd mamy wiedzieć, skoro nie wkleiłeś żadnego kodu?
P-138905
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.
P-138906
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.
P-139022
« 1 »
  Strona 1 z 1