Skocz do zawartości

Trzy pytania odnośnie GDI


Mothership

Recommended Posts

1. Jak zapisać obraz z kontekstu, tzn. cos sobie narysowałem na ekranie (GDI) i jak teraz zapisać to do pliku (dajmy na to BMP)?
2. Czy istnieje komunikat, który informuje, ze obraz "wychodzi" poza obszar malowania (w przypadku standardowych ustawieniach strktury PAINTSTRUCT - poza okno)?
3. Jak zachować obraz, który namalowałem metodą GetDC() tak by po ponownym odrysowaniu okna (np. po zminimalizowaniu) by znow widoczny - tak jak bym to malował w obsłudze komunikatów WM_PAINT?

Link do komentarza
Udostępnij na innych stronach

1. Aby cos wogole rysowac po kontekscie, wczesniej musi byc do niego przypisana mapa (SelectObject()). Ona ma wyznaczona wysokosc i szerokosc obrazka i tylko wzgledem tych rozmiarow bedzie widoczne jakiekolwiek rysowanie. Aby zapisac ta mape do pliku nie pobiera sie nic z tego kontekstu tylko bezposrednio z uchwytu tej mapy. A wykonuje sie to za pomoca funkcji GetObject(HBitmap, sizeof(DibSection), DibSection). Z tych informacji mozna juz zainicjowac BitmapInfoHeader, rozmiar mapy DIB itd. I z tych informacji (oczywiscie trzeba tez zainicjowac BITMAPFILEHEADER) mozna juz zapisac mape. Funkcja GetDIBits zwraca nam dane mapy.
2. Nie ma takiego komunikatu. Ale chyba jezeli znasz rozmiar klienta (GetClientRect) to chyba bedziesz wiedzial czy rysujesz poza obszar.
3. Nie odrysowuj nigdzie indziej jak w komunikacie WM_PAINT, poprzez BeginPaint i EndPaint.

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...