我有一个win32应用程序,我想通过拖动鼠标画一条线。我也使用双缓冲,但问题是它在鼠标的路径中绘制多行。这里是我的绘制代码:C++ win32项目双缓冲
hdc = BeginPaint(hWnd, &ps);
hdcBack = CreateCompatibleDC(hdc);
GetClientRect(hWnd, &windowRect);
backBuffer = CreateCompatibleBitmap(hdc, windowRect.right, windowRect.bottom);
SelectObject(hdcBack, backBuffer);
FloodFill(hdcBack, 0, 0, RGB(255, 255, 255));
BitBlt(hdcBack,0,0,windowRect.right,windowRect.bottom,hdc,0,0,SRCCOPY);
color = RGB(rand() % 255, rand() % 255, rand() % 255);
hBrush = CreateSolidBrush(color);
SelectObject (hdcBack, hBrush);
MoveToEx(hdcBack,x1,y1,NULL); //x1,y1,x2,y2 are the initial click point and the current position of the mouse when keeping the left button down and dragging
LineTo(hdcBack,x2,y2);
BitBlt(hdc, 0, 0, windowRect.right, windowRect.bottom, hdcBack, 0, 0, SRCCOPY);
DeleteObject(hBrush);
DeleteDC(hdcBack);
DeleteObject(backBuffer);
EndPaint(hWnd, &ps);
我想也不会复制背景到缓冲器绘制前行并正确绘制线,但是当我画一条新的生产线以前绘制的线消失。 那么我怎样才能绘制多行双缓冲和保持以前画出的线?
我很抱歉在我的问题上有点不清楚。如果我评论第一个BitBlt,它可以绘制一条线。但我想绘制多行。但是当我开始绘制下一行时,前一个消失。我希望它保持下去。不知何故,我想保存背景,但只有当一条线被完全绘制时。而刷子是为了另一个目的。我应该删除它,但它不会影响我的代码。 – Paul 2011-03-15 08:55:08
在这种情况下,您需要另一个缓冲区,该缓冲区将存在于鼠标移动处理程序的作用域之外,并包含最新的_applied_更改,并在绘制拖动的行之前从其中复制数据而不是“hdc”。我希望这能解决这个问题。 – 2011-03-15 09:55:24