| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1344 人关注过本帖
标题:关于双缓冲问题
只看楼主 加入收藏
gao_gao86
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-3-3
收藏
 问题点数:0 回复次数:5 
关于双缓冲问题

我用MFC写了一个简单的五子棋界面,但是一拖屏幕的话窗口中的画面就会闪动,于是我用双缓冲来改写了OnPaint,
但是结果还是老样子。不知道问题出在哪里。这种现象是否和屏幕或者显卡有关系? 希望高手能指点迷津。小弟不胜感激!
OnPaint的代码如下
void CChildView::OnPaint()
{
CRect rect;
GetWindowRect(&rect);

CPaintDC pDC(this);

CBitmap bmp;
CDC MemDC;

MemDC.CreateCompatibleDC(&pDC);
bmp.CreateCompatibleBitmap(&pDC,rect.Width(),rect.Height());

MemDC.SelectObject(&bmp);
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(192.,192,192));
DrawBoard(&MemDC);
pDC.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.DeleteDC();
bmp.DeleteObject();
}

BOOL CChildView::OnEraseBkgnd(CDC *pDC)
{
return TRUE;
}
另外我重载了OnEraseBkgnd直接返回TRUE
请问这里面有问题吗?

搜索更多相关主题的帖子: 五子棋 pDC 缓冲 OnPaint CDC 
2007-08-03 16:18
radcat
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:306
专家分:45
注 册:2006-9-12
收藏
得分:0 
把代码改到OnEraseBkgnd里试试

2007-08-04 09:51
gao_gao86
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-3-3
收藏
得分:0 
回复:(radcat)把代码改到OnEraseBkgnd里试试
OnEraseBkgnd 函数里做的是什么工作啊? 不过我想 重画的话也只是重画视图里的东西 为什么我窗口上的菜单栏也会一起闪呢 ?
2007-08-05 17:06
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

那就有问题了,建议把显卡的驱动重新安装一遍


天行健,君子以自强不息!!QQ:68660681
2007-08-05 19:20
眼底星空
Rank: 4
等 级:业余侠客
威 望:3
帖 子:85
专家分:289
注 册:2006-9-2
收藏
得分:0 

OnEraseBkgnd就这样没问题
GetWindowRect是不是要用GetClientRect啊
觉得应该在OnDraw里写,直接用OnDraw参数中的CDC生成内存CDC
试试看吧


无为而为 && 每天进步一小点...
2007-08-10 17:08
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

在OnDraw里面写如果OnPaint不手动调用的话它是不会执行到OnDraw函数的
你可以设置个定时器,在定时器里面贴图,但是定时器里面不要Invalidate()

他那个rect不是确定位置的,是用来确定宽度和高度的,所以无关紧要。。


天行健,君子以自强不息!!QQ:68660681
2007-08-11 12:37
快速回复:关于双缓冲问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042706 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved