对话框绘图闪烁问题 我在对话框上绘制的图画,刷新时闪烁怎么解决?还有在内存中绘好图,到底可不可以用BitBlt贴到对话框上? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 响应WM_ERASEBKGND消息,直接返回TRUE。当然可以,不然“双缓冲”还有什么用。 使用双缓冲建立一个和当前DC 一栏的内存DC(保存住直到不用时在释放)然后在内存DC中画,刷新时直接帖上去拦截WM_ERASEBKGND不要让其擦除背景(什么也不做,直接返回就好了) HDC hMemDC = CreateCompatibleDC(GetDC());HBITMAP = CreateCompatibleBitmap(GetDC());SelectObject(hMemDC, hMemBmp);...画到hMemDC;...OnPaint(){...BitBlt(hdc, ..., hMemDC, ..., SRCCOPY);...} BOOL CTestDlg::OnEraseBkgnd(CDC *pDC) { CDCmemDC; CBitmap MPlayer; if(!MPlayer.LoadBitmap(IDB_BITMAPBACKGROUND)) //装载界面位图 return FALSE; memDC.CreateCompatibleDC(pDC);//创建兼容的设备 CBitmap *pOldBmp=memDC.SelectObject(&MPlayer);//将位图选进设备 pDC->BitBlt(0,0,MPLAYERWIDTH,MPLAYEREXT,&memDC,1,1,SRCCOPY);//设备之间的拷贝 memDC.SelectObject(pOldBmp);//恢复设备 return TRUE; } 放在onpain中一样,小加修改就可以了 如果在OnDraw函数中重绘就会造成闪烁,如果在WM_ERASEBKGND消息中重绘应该会好点,如果还闪的厉害就不知道了。 winmm.lib库会不会被多次链接进程序?? 为什么同样的程序在别人机子上可以运行,在我的机子上报错呢?error C2011 客户端怎么得到其他客户端在线? 有关于CShockwaveFlash使用的问题?急!!!! IInternetSecurityManager接口谁做过 我想用程序来隐藏邮件的附件 请帮忙... 南充人一纸诉状要腾讯给说法 静态文本框的透明背景文字重叠的问题 关于声卡编程的技术在vc环境下了 如何改变列表框的字体的大小 请帮忙修改程序错误 如何在驱动没装之前 就获得显卡的vendor ID ?
当然可以,不然“双缓冲”还有什么用。
建立一个和当前DC 一栏的内存DC(保存住直到不用时在释放)
然后在内存DC中画,刷新时直接帖上去
拦截WM_ERASEBKGND不要让其擦除背景(什么也不做,直接返回就好了)
HBITMAP = CreateCompatibleBitmap(GetDC());
SelectObject(hMemDC, hMemBmp);
...
画到hMemDC;
...
OnPaint()
{
...
BitBlt(hdc, ..., hMemDC, ..., SRCCOPY);
...
}
{ CDCmemDC;
CBitmap MPlayer;
if(!MPlayer.LoadBitmap(IDB_BITMAPBACKGROUND)) //装载界面位图
return FALSE;
memDC.CreateCompatibleDC(pDC);//创建兼容的设备
CBitmap *pOldBmp=memDC.SelectObject(&MPlayer);//将位图选进设备
pDC->BitBlt(0,0,MPLAYERWIDTH,MPLAYEREXT,&memDC,1,1,SRCCOPY);//设备之间的拷贝
memDC.SelectObject(pOldBmp);//恢复设备
return TRUE;
}
放在onpain中一样,小加修改就可以了