请问如何使用双缓冲来解决绘图抖动

大爷想要时光机 2008-06-18 05:33:13
case WM_PAINT: 
hdc = BeginPaint(hwnd,&stPs);
memDC = CreateCompatibleDC(hdc);
memBM = CreateCompatibleBitmap(hdc,544,375);
SelectObject(memDC,memBM);
FillRect(memDC,&rectClient,hBrushWhite);//把窗口刷成白色

//下面就是画格子
for (int siCnt = 20;siCnt <= 544;siCnt+=10)
{
MoveToEx(memDC,rectClient.left + siCnt,rectClient.top,NULL);
LineTo(memDC,rectClient.left + siCnt,rectClient.bottom);
}
for (int siCnt = 20;siCnt <= 375;siCnt+=10)
{
MoveToEx(memDC,rectClient.left,rectClient.top + siCnt,NULL);
LineTo(memDC,rectClient.right,rectClient.top + siCnt);
}
BitBlt(hdc,rectClient.left,rectClient.top,544,375,memDC,rectClient.left,rectClient.top,SRCCOPY);
DeleteDC(memDC);
EndPaint(hwnd,&stPs);
break;


看了网上的方法大概是这样,但是用不用效果都一样,还是会闪。
我是用了一个定时器,不断的让窗口重绘。
...全文
200 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Amuro1987218 2008-07-24
  • 打赏
  • 举报
回复
此方君,如果你没有在WM_ERASEBKGND直接返回true(不刷新背景),那么画面则如此变化:绘图画面->窗口背景色->绘图画面
如此发生闪烁.
sybtjp 2008-07-24
  • 打赏
  • 举报
回复
因为他已经自动调用了啊
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 smallfishff 的回复:]
如果使用了定時器 就不因該處理WM_PAINT消息
[/Quote]
为啥呢?
scq2099yt 2008-06-19
  • 打赏
  • 举报
回复
//双缓存绘图
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP_BG);
//IDB_BITMAP_BG是你自己的图对应的ID
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
yjgx007 2008-06-19
  • 打赏
  • 举报
回复
最好在WM_ERASEBKGND的消息函数中绘图, 不要在WM_PAINT的消息函数OnPaint中.
smallfishff 2008-06-19
  • 打赏
  • 举报
回复
如果使用了定時器 就不因該處理WM_PAINT消息
yupengchen951124 2008-06-18
  • 打赏
  • 举报
回复
呵呵 ……虚心看高人 回复
t_ianya 2008-06-18
  • 打赏
  • 举报
回复
顶一个
学习了

.........
.....
回复内容太短了!
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
响应WM_ERASEBKGND消息,直接return TRUE;
[/Quote]
太谢谢了,俺的程序就差这个了,搞定了
cnzdgs 2008-06-18
  • 打赏
  • 举报
回复
case WM_ERASEBKGND:
return TRUE;
  • 打赏
  • 举报
回复
好,我试试,,,星星好刺眼!!!!
  • 打赏
  • 举报
回复
???????????????????
cnzdgs 2008-06-18
  • 打赏
  • 举报
回复
响应WM_ERASEBKGND消息,直接return TRUE;

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧