eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming[winapi] mulący repaint przy resizeRe: [winapi] mulÄ?cy repaint przy resize
  • Data: 2010-06-15 08:04:23
    Temat: Re: [winapi] mulÄ?cy repaint przy resize
    Od: " ślamazar" <f...@W...gazeta.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    > fir <p...@p...onet.pl> napisał(a):
    > > no muszę looknąć - dawno i zarazem rzadko używałem czystego winapi
    > > (i choć zarazem szkielet i najczesciej używane funkcje mam
    > > opanowane to mam pewne luki) kwestia tego że ja swój bufor
    > > mam w wygodnym mi formacie (i dopiero przy rysowaniu
    > > wartosci przetwarzam na kolory pixeli) - pewnie dla tego bitblta
    > > musialbym przygotowac go specjalnie, mozesz powiedzec pare słow
    > > o przygotowaniu tego bufora do blitnięcia? [da sie blitnac od razu
    > > np cos takiego "unsigned char [400][300][3];" ?]
    >
    > Właśnie tak robiłem.
    > BYTE bitmap[800*600*3];
    > void drawf(HDC lnghdc) {
    > HDC fHDC = CreateCompatibleDC(NULL);
    > BITMAPINFOHEADER bmiHeader;
    > bmiHeader.biSize=sizeof(bmiHeader);
    > bmiHeader.biWidth = 800;
    > bmiHeader.biHeight = -600;
    > bmiHeader.biPlanes = 1;
    > bmiHeader.biBitCount = 24;
    > bmiHeader.biCompression = BI_RGB;
    > bmiHeader.biSizeImage = 0;
    > bmiHeader.biXPelsPerMeter =0;
    > bmiHeader.biYPelsPerMeter =0;
    > bmiHeader.biClrUsed = 0;
    > bmiHeader.biClrImportant = 0;
    > BITMAPINFO pbmi;
    > pbmi.bmiHeader = bmiHeader;
    > void *ppvBits = NULL;
    > HBITMAP fBitmap = CreateDIBSection (fHDC, &pbmi, DIB_RGB_COLORS, &ppvBits,
    > NULL, NULL);
    > SelectObject(fHDC,fBitmap);
    > CopyMemory(ppvBits,bitmap,800*600*3);
    > BitBlt(lnghdc,0,0,800,600,fHDC,0,0,SRCCOPY);
    > DeleteObject(fBitmap);
    > }
    >
    ok, zasiadłem do maszyny i to zasadniczo działa, tnx tylko ze
    widzę tu chyba trzy błedy/problemy

    1) o ile sie orientuje samo CreatedibSection alokuje sobie bufor
    ktory jest dostepny pod ppvBits[] i mozna go uzywac,
    a CopyMemory z jeszcze jednego innego bufora jest fatalną redundancją
    i marnotrastwem i ramu i procka

    2) całą to inicjalicacje przed BitBlt jak i destrukcje
    po, warto zrobic tylko raz na poczatku i raz na koncu a nie wespol
    z kazdym BitBlitem

    3) w moim helpie do winapi jest napisane zeby deletowac zarowno
    bitmape jak i kontekst a ty deletujesz tylko bitmape; tu mam niejasnosc
    bo bitmapa jest czescia kontekstu i nie wiem czy o tyle wystarczy
    dletnac tylko kontekst czy tez np wczesniej jego podczesc czyli bitmape :-/

    czy ktos moglby to wyjasnic - powiedziec pare słow

    fir



    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: