c ++ - Tegning på en DIB virker ikke

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder på en GUI-klasse, og jeg lavede en metode, der maler en bitmap på et vindue fra en række pixels.
Jeg vil gerne trække på den bitmap på samme måde. Jeg bruger også en off-screen DC for at undgå flimring.


Her er min kode:


int width(m\_rect.right - m\_rect.left), height(m\_rect.bottom - m\_rect.top); // m\_rect is the RECT of the bitmap, initialized beforehand

BITMAPINFOHEADER bih = { 0 };
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biCompression = BI\_RGB;
bih.biBitCount = 32;
bih.biPlanes = 1;
bih.biWidth = width; // = 100, for instance
bih.biHeight = height; // = 100, same here

HDC dc = CreateCompatibleDC(hdc); // "hdc" is the DC of my window
HBITMAP bmp = CreateDIBitmap(hdc, &bih, CBM\_INIT, m\_data, &m\_bmpInfo, DIB\_RGB\_COLORS); // creates a 32-bit device-independent bitmap
HGDIOBJ oldObj = SelectObject(dc, bmp);

RECT r = { m\_rect.left + 10, m\_rect.top + 10, m\_rect.right - 10, m\_rect.bottom - 10 };
HBRUSH brush = CreateSolidBrush(0xff);
FillRect(dc, &r, brush); // this line doesn't work!
DeleteObject(brush);

BitBlt(hdc, m\_rect.left, m\_rect.top, width, height, dc, 0, 0, SRCCOPY);
SelectObject(dc, oldObj);
DeleteObject(bmp);
DeleteDC(dc);


Problemet er, at jeg ikke kan tegne noget på bitmapet. Det er korrekt tegnet på skærmen, men jeg kan ikke trække på det. Samme med andre tegnefunktioner: Rectangle, RoundRect, osv. Også ydeevne betyder noget for mig. Jo hurtigere denne kode er, jo gladere får jeg. Så hvis du har noget råd om ydelsesforbedringer, lad mig det vide.


Enhver hjælp ville blive meget værdsat.
Tak på forhånd.

Bedste reference