MFC 对话框解决拉动窗口屏幕闪动的问题

voidCDisplay::OnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODO:Addyourmess... void CDisplay::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

CBitmap bitmap;//位图对象
BITMAP m_bitmap; //位图结构体 ,放位图的信息,包括大小
bitmap.LoadBitmap(IDB_BITMAP1);//加载位图
bitmap.GetBitmap(&m_bitmap);//把位图的信息放到结构体中

CDC dccompatible; //一个画图对象

dccompatible.CreateCompatibleDC(&dc);//创建兼容DC

dccompatible.SelectObject(&bitmap);
CRect rect;

GetClientRect(&rect); //获得客户区的大小
// pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dccompatible,0,0,SRCCOPY);//1比1的拷贝
dc.StretchBlt(0,0,rect.Width(),rect.Height(),
&dccompatible,0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,SRCCOPY );//随窗口变化而变化

// Do not call CDialog::OnPaint() for painting messages
}
添加这个消息就可以了,把系统生成的返回值注释了,在自己写一个return true;
展开
 我来答
dukang9904455
2011-08-27 · TA获得超过811个赞
知道小有建树答主
回答量:1028
采纳率:0%
帮助的人:944万
展开全部
可以考虑添加消息响应WM_ERASEBKGND
然后可以看到
BOOL C×××Dlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return CDialog::OnEraseBkgnd(pDC);
}
然后把return CDialog::OnEraseBkgnd(pDC);换成return true;(如果true不行,就false,具有哪个忘了)
但是这样有副作用,就是背景没有擦除就在上面绘制。
追问
恩,我知道了,我的问题已经解决了!
ZP890818
2011-09-01 · 超过10用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:24.9万
展开全部
双缓冲的那几个函数,OnEraseBkgnd擦除背景就好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式