闪屏问题闪屏问题
闪屏问题的处理方案:
为了美化窗口界面,通过在View类里重载OnDraw()函数来修改背景图片。但是进入主窗口后,
拖动或最小最大化窗口时,会出现闪屏,本人通过实验,感觉以下方法简单且可行,很适合新手。
因此,现整理一下,与大家共享!
出现闪屏的原因:我们绘图的时候,大都是在View类中,重载OnDraw()或OnPaint()函数。
OnDraw在进行屏幕显示时时由OnPaint进行调用的。当窗口进行重绘是,总是先用背景色将显示
区清除,然后才调用 OnPaint,而背景色往往与绘图内容 反差很大,...
闪屏问
闪屏问题的处理
:
为了美化窗口界面,通过在View类里重载OnDraw()函数来修改背景图片。但是进入主窗口后,
拖动或最小最大化窗口时,会出现闪屏,本人通过实验,感觉以下
简单且可行,很适合新手。
因此,现整理一下,与大家共享!
出现闪屏的原因:我们绘图的时候,大都是在View类中,重载OnDraw()或OnPaint()函数。
OnDraw在进行屏幕显示时时由OnPaint进行调用的。当窗口进行重绘是,总是先用背景色将显示
区清除,然后才调用 OnPaint,而背景色往往与绘图内容 反差很大,这样在短时间内背景色与显
示图形就会交替出现,使得显示窗口看起来在闪。如果将背景色 设置成NUll,这样无论怎样重绘
图形都不会闪了。当然,这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制
的图形进行清除,而又叠加上了新的图形。
具体的解决方案:
首先当然是去掉MFC提供的背景绘制过程了。这里介绍一种简单而又实用的方法:即通过在View
类中,重载OnEraseBkgnd(CDC* pDC)函数,返回TRUE。
然后,就是直接在OnDraw()函数中绘图即可。
下面就是具体的代码:
void CPROJECTNAMEView::OnDraw(CDC* pDC) {
CMPMISDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
::SetWindowText(GetParent()->m_hWnd,"智能系统");//修改主窗体的名字
CBitmap bmp;;//定义一个位图对象
bmp.LoadBitmap(IDB_MAINBMP);//上传位图,即所要修改为的背景图形
CDC memDC; //首先定义一个显示设备对象
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bmp);
//获取窗口的大小
BITMAP bmInfo;
bmp.GetBitmap(&bmInfo);
int width=bmInfo.bmWidth;
int heigth=bmInfo.bmHeight;
CRect rc;
GetClientRect(rc);
pDC->StretchBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,width,heigth,SRCCOPY);
//绘图完成后的清理
memDC.DeleteDC();
bmp.DeleteObject();
}
BOOL CPROJECTNAMEView::OnEraseBkgnd(CDC* pDC) {
// TODO: Add your message handler code here and/or call default
return TRUE;
//return CScrollView::OnEraseBkgnd(pDC);
}
本文档为【闪屏问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。