怎么用双缓冲解决MFC的闪屏
1个回答
展开全部
您好,通常情况下,增加1个DC可以解决闪屏问题。
新的DC用于在后缓冲区中绘图。
再用CDC::BitBlt()这类函数将新DC的内容绘制到窗口绘图区的DC,通常这样就可以解决闪屏了。
假设您在MFC视图类中使用OnDraw函数绘图,示例代码如下:
///////////////////////////////////begin///////////////////////////////////////////////////////////////
void 您的视图类名称::OnDraw(CDC* pDC)
{
...
...
//新DC
CDC MemDC;
//创建与原Dc兼容的DC,用于后台绘图
MemDC.CreateCompatibleDC(/*这里的参数是窗口绘图区的DC指针*/ pDC);
/*在MemDC中绘制DIB图像*/
...
...
//调用CDC::BitBlt()函数,将MemDC中的内容绘制到pDC
pDC->BitBlt(..., &MemDC, ...);
...
...
}
////////////////////////////////////////////////////end//////////////////////////////////////////////////////////////////////////////////////////
如上示例是使用MFC解决问题的思路,如果您直接调用的是Windows API则请参考上述代码修改,思路不变。希望我的回答可以帮到您。
新的DC用于在后缓冲区中绘图。
再用CDC::BitBlt()这类函数将新DC的内容绘制到窗口绘图区的DC,通常这样就可以解决闪屏了。
假设您在MFC视图类中使用OnDraw函数绘图,示例代码如下:
///////////////////////////////////begin///////////////////////////////////////////////////////////////
void 您的视图类名称::OnDraw(CDC* pDC)
{
...
...
//新DC
CDC MemDC;
//创建与原Dc兼容的DC,用于后台绘图
MemDC.CreateCompatibleDC(/*这里的参数是窗口绘图区的DC指针*/ pDC);
/*在MemDC中绘制DIB图像*/
...
...
//调用CDC::BitBlt()函数,将MemDC中的内容绘制到pDC
pDC->BitBlt(..., &MemDC, ...);
...
...
}
////////////////////////////////////////////////////end//////////////////////////////////////////////////////////////////////////////////////////
如上示例是使用MFC解决问题的思路,如果您直接调用的是Windows API则请参考上述代码修改,思路不变。希望我的回答可以帮到您。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询