我有一個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