C ++ win32 api双缓存示例请帮忙

时间:2013-08-26 22:47:07

标签: c++ winapi double-buffering

所以,我知道人们谈论不同帖子的双缓冲,但每当我尝试它时,我会得到一个黑屏!这是因为我看到的例子(我需要示例)不按照我的方式编程 - 就像使用不同的库一样。我现在只用。无论如何,这是最初的程序片,它严重闪烁:

void drawRed (HDC hdc)
{
  HDC hdcMemory;
  hdcMemory = CreateCompatibleDC(hdc);

  while (1==1){

  SelectObject(hdcMemory, redmask);
  BitBlt(hdc, 132, 132, 128, 128, hdcMemory, 0, 0, SRCAND);

  SelectObject(hdcMemory, red);
  BitBlt(hdc, 132, 132, 128, 128, hdcMemory, 0, 0, SRCPAINT);
  }

  DeleteDC(hdcMemory);
}

我看了看并尝试了这个:

void drawRed (HDC hdc)
{
 HDC hDC = GetDC(hnd);

 HDC hdcMemory;
 hdcMemory = CreateCompatibleDC(hdc);

 HDC memDC = CreateCompatibleDC(hDC);
 HBITMAP hMemBmp = CreateCompatibleBitmap(hDC,100,100);
 HBITMAP hOldBmp =  (HBITMAP)SelectObject(memDC,hMemBmp);

 SelectObject(hdcMemory, hbmMem);
 BitBlt(hDC, -100, -100, 128, 128, memDC, 0, 0, SRCAND);

 SelectObject(hdcMemory, red);
 BitBlt(hDC, -100, -100, 128, 128, memDC, 0, 0, SRCPAINT);

 SelectObject(hdcMemory, red);
 BitBlt(hDC, 132, 132, 128, 128, memDC, 0, 0, SRCCOPY);

 DeleteDC(hdcMemory);
}

这只是一个黑盒子。我不知道我该怎么做,所以你能改变原来的代码块来进行双缓冲吗?谢谢!

我使用dev-c ++ ide。

1 个答案:

答案 0 :(得分:0)

对于MFC,您可以使用Keith Rule的 CMemDC 类。有一个关于这个类的好文章,例如 - http://www.codeproject.com/Articles/33/Flicker-Free-Drawing-In-MFC

MFC功能包中包含的类似类 - http://msdn.microsoft.com/en-us/library/cc308997.aspx