저는 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
그럴 경우, 마우스 이동 핸들러의 범위를 벗어나서 가장 최근의 _applied_ 변경 사항을 포함하는 다른 버퍼가 필요하며 드래그 된 선을 그리기 전에 'hdc'대신 데이터를 복사해야합니다. 이 문제를 해결하기 바랍니다. –