我正在尝试实现双缓冲但它似乎不起作用,即图形仍然闪烁.
每次鼠标移动时都会调用WM_PAINT.(WM_MOUSEMOVE)
粘贴WM_PAINT如下:
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rect;
GetClientRect(hWnd, &rect);
int width=rect.right;
int height=rect.bottom;
HDC backbuffDC = CreateCompatibleDC(hdc);
HBITMAP backbuffer = CreateCompatibleBitmap( hdc, width, height);
int savedDC = SaveDC(backbuffDC);
SelectObject( backbuffDC, backbuffer );
HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));
FillRect(backbuffDC,&rect,hBrush);
DeleteObject(hBrush);
if(fileImport)
{
importFile(backbuffDC);
}
if(renderWiredCube)
{
wireframeCube(backbuffDC);
}
if(renderColoredCube)
{
renderColorCube(backbuffDC);
}
BitBlt(hdc,0,0,width,height,backbuffDC,0,0,SRCCOPY);
RestoreDC(backbuffDC,savedDC);
DeleteObject(backbuffer);
DeleteDC(backbuffDC);
EndPaint(hWnd, &ps);
}
Run Code Online (Sandbox Code Playgroud) 默认的winAPI应用程序没有双缓冲.相反,它确实能够确保只绘制需要绘制的内容,并使其具有无缝外观.但是,当您调整窗口大小时,需要重新绘制整个窗口,这会导致控件,选项卡上的背景以及选项卡的白色之间出现闪烁.
所以我的问题是,在我的应用程序中支持双缓冲的最简单方法是什么?