Win32双缓冲绘图黑色背景

时间:2012-01-16 03:09:21

标签: c++ winapi bitblt double-buffering

在c ++中用win32做一个项目,尝试对正在绘制的图像进行双重缓冲,但是我得到一个黑色屏幕,上面绘制了正确的位图。这也导致我的WM_MOUSEMOVE条件,它会将位图与光标一起拖动以不绘制位图。 paint的代码如下:paint()在WM_PAINT下的wndproc中调用,scroll是滚动条的位置,到目前为止尚未使用。

int paint(HWND hWnd, HINSTANCE hInst, RECT clientRect, std::vector<Measure> *measures, int scroll)
{
int x = 90;
hdc = BeginPaint(hWnd, &ps);
hdcmem = CreateCompatibleDC(hdc);
HBITMAP hbmScreen = CreateCompatibleBitmap(hdc, clientRect.right, clientRect.bottom);
SelectObject(hdcmem,hbmScreen); 
/*these functions just create the bitmaps into hdcmem*/
drawStaff(hWnd, hInst, clientRect, x, 0);
drawKey(hWnd, hInst, clientRect, x, (*measures)[0], 0);
drawTime(hWnd, hInst, clientRect, x, (*measures)[0], 0);
drawNotes(hWnd, hInst, clientRect, measures, x);
    BitBlt(hdc, 0, 0, clientRect.right, clientRect.bottom, hdcmem, 0, 0, SRCCOPY);
ReleaseDC(hWnd, hdcmem);
return 0;
}

1 个答案:

答案 0 :(得分:3)

在绘制其他图形之前,您需要使用任何背景颜色填充位图。如果内存正确地为我服务,则在创建位图时默认情况下填充黑色。