C++ API使用双缓存绘制窗口


在使用GUI的时候,如果不使用双缓存,屏幕就会闪烁,我想问一问大家是怎么实现双缓存的?我觉得我的方法在效率方面很低。。。

   
  HWND hwnd;
  

HDC hdc; //DC
HDC bghdc; //缓存DC

void Draw()
{
hdc = GetDC(hwnd);
bghdc = CreateCompatibleDC(hdc);

//此处为绘制内容

BitBlt (hdc, 0, 0, 800, 600, bghdc, 0, 0, SRCCOPY);
DeleteDC(bghdc);
ReleaseDC(hwnd, hdc);
}

每次绘制的时候都要Get一次,再创建一次,感觉上似乎降低了效率。。。不知道大家是怎么实现的??

GUI开发 C++

被咬的苹果 12 years ago

如果每次画的图不同, 你肯定要这样, 因为你必须要画图, 画在哪个dc上都是要画的, 而如果有些东西不变, 你就可以先放在内存dc中存起来, 用的时候直接贴上,比如:

   
  HWND hwnd = NULL;
  

HDC bghdc = NULL; //缓存DC

bool InitMemDC(HDC hdc)
{
if(hMemDc != NULL) return true;
bghdc = CreateCompatibleDC(hdc);
//此处为绘制内容
}
void Draw()
{
HDC hdc = GetDC(hwnd);
if(bghdc != NULL) InitMemDC(hdc);
BitBlt (hdc, 0, 0, 800, 600, bghdc, 0, 0, SRCCOPY);
ReleaseDC(hwnd, hdc);
}

一个好农民 answered 12 years ago

Your Answer