社区
界面
帖子详情
关于闪烁的问题(双缓冲也不行呀!!)!!请个位大侠指点!!小弟必拱手献上100分以表谢意!!
crgxw
2004-09-07 09:08:04
我在"桌面\属性\效果\"选择了"拖动时显示窗口内容"(必须选)
然后作了一个基于CFormView的一个工程,用双缓冲画了一条曲线,
可是在用鼠标拖动右下角改变窗体的大小时会出现严重的闪烁,请个位大侠指点!!
小弟深表感谢!!
最好有原码发送到
Email:cr-gxw@163.net
crgxw@163.com
...全文
275
9
打赏
收藏
关于闪烁的问题(双缓冲也不行呀!!)!!请个位大侠指点!!小弟必拱手献上100分以表谢意!!
我在"桌面\属性\效果\"选择了"拖动时显示窗口内容"(必须选) 然后作了一个基于CFormView的一个工程,用双缓冲画了一条曲线, 可是在用鼠标拖动右下角改变窗体的大小时会出现严重的闪烁,请个位大侠指点!! 小弟深表感谢!! 最好有原码发送到 Email:cr-gxw@163.net crgxw@163.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
菜牛
2004-09-09
打赏
举报
回复
已经给你发了个例子。
huwei001982
2004-09-09
打赏
举报
回复
使用双缓冲时
在 OnPaint 或 OnDraw 一般只写一条语句
XXX.Draw(pDC);就行
菜牛
2004-09-08
打赏
举报
回复
双缓冲消除闪烁是肯定行的,关键是方法对不对。
在响应刷新WM_PAINT消息的时候,只需做一件事情:将内存DC绘制到窗口DC上,所有其他绘图操作不要再刷新的时候执行。
也就是说,创建、选入选出、绘制、销毁等工作不要在刷新的时候做,通过成员变量保存内存DC,在需要的时候绘制内存DC,为了防止窗口改变大小的时候有延迟(决不会闪烁),可以一开始就创建屏幕大小的内存位图选入内存DC(够用了吧),不要改变内存位图大小。你好像没有处理内存位图的尺寸,不知道改变窗口大小后会怎么样。
crgxw
2004-09-07
打赏
举报
回复
这是我的代码请个位大侠指点
void CCourveWnd::OnPaint()
{
CPaintDC dc(this);
this ->GetClientRect(this ->m_ClientRect);
if(m_MemDC.m_hDC == NULL)
this ->m_MemDC.CreateCompatibleDC(&dc);
if(MyBitMap.m_hObject == NULL)
this ->MyBitMap.CreateCompatibleBitmap(&dc,m_ClientRect.right,m_ClientRect.bottom );
CBitmap * pOldBitmap = this ->m_MemDC.SelectObject(&MyBitMap);
this ->MemBitMap(&m_MemDC);
dc.BitBlt(0,0,m_ClientRect.right,m_ClientRect.bottom,&m_MemDC,0,0,SRCCOPY);
m_MemDC.SelectObject(pOldBitmap);
CWnd::OnPaint();
}
void CCourveWnd::MemBitMap(CDC *pDC)
{
this ->GetClientRect(this ->m_ClientRect);
pDC ->FillSolidRect(m_ClientRect,RGB(0,0,0));
DrawDashDLine(pDC);//画上边虚线(红色)
DrawLine(pDC);//画底线(实线)
this ->DrawCurve(pDC);
this ->m_pOldPen = pDC ->SelectObject(&this ->m_PenMoveWnd);
if ( m_gIsLbDown && this ->m_IsSetCursor && m_IsDrawBottomLine)
{
// m_IsDrawBottomLine = true;
DrawBottomLine(pDC);
if(m_gIsDrawCrossOne)
{
DrawCross(pDC);
}
}
if(m_gDrawAllWndCrossCursor)
{
// DrawBottomLine(pDC);
DrawAllShowWndCrossCursor(pDC);
}
pDC ->SelectObject(m_pOldPen);
/* if(m_gIsDrawCross)
{
DrawCross(pDC);
}*/
}
snaill
2004-09-07
打赏
举报
回复
同意楼上的
pomelowu
2004-09-07
打赏
举报
回复
如果双缓存都不行的话就重载OnEraseBkgnd,什么都不要做,直接返回TRUE
但是还是把你的双缓存的代码贴出来看看吧。
DentistryDoctor
2004-09-07
打赏
举报
回复
不知你的双缓冲代码是怎么写的,帖出来吧。
atEleven
2004-09-07
打赏
举报
回复
WM_ERASEBKGND消息直接返回TRUE
alene_cn
2004-09-07
打赏
举报
回复
1 屏蔽WM_ERASEBKGND
2 如调用InvalidateRect,则第二个参数置为FALSE。
如何使用 GDI+
双缓冲
解决绘图
闪烁
问题
这几日要用C#做一个简单的图形处理工具.但刚开始就遇见一个头疼的
问题
.图片用鼠标移动时
闪烁
很明显,使用
双缓冲
来解决这个
问题
,对图形处理有经验的人都能想到. 现在的
问题
是很多人不知道怎么怎么使用GDI+
双缓冲
,我从网上搜到很多资料,加上手里的一本书也介绍了一两页,就这样我依然被折磨了整整一天,就在要崩溃前我终于搞明白.本来很简单的东西按照网上的还是书上的方法怎么试都
不行
!这到底
MFC基础知识(四)——
双缓冲
解决刷屏时
闪烁
本文主要介绍:在利用MFC画图或图像显示时,有时候需要调用OnDraw()函数刷新屏幕,而屏幕往往会发生
闪烁
,本文主要介绍利用
双缓冲
解决闪屏
问题
。 关于闪屏方面的介绍分析见博文: http://blog.csdn.net/longzaitianya1989/article/details/18266899 博文中关于
双缓冲
实现部分不够详尽,实现过程中可能会出现
问题
,下面再介绍一下: 1
MFC
双缓冲
解决图象
闪烁
转载网上找到的一篇
双缓冲
的文章,很好用。_______________________________________________________________________显示图形如何避免
闪烁
,如何提高显示效率是问得比较多的
问题
。而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一
Qt5
双缓冲
机制
所谓
双缓冲
机制,即在绘制控件时,首先要将绘制的内容绘制在一个图片中,再将图片一次性绘制到控件上。在早期的Qt版本中,若直接在控件上进行绘制,则在控件重绘时会产生
闪烁
的现象,控件重绘频繁,
闪烁
尤为明显。
双缓冲
机制可以有效地消除这种
闪烁
现象。自Qt5版本之后,QWidget控件已经能够自动处理
闪烁
的
问题
。因此,在控件上直接绘图时,不用担心显示的
闪烁
问题
。,但
双缓冲
机制在很多场合仍然有其用武之地,当所需绘
Linux framebuffer
双缓冲
防止
闪烁
昨天写了一篇文章: 使用Linux Framebuffer绘制32
位
真彩图形: https://blog.csdn.net/dog250/article/details/90113737 并发了朋友圈表示这件事结束了,玩了一天,玩恶心了。 但是我依然是想做出一个可以拖拽的不规则GUI界面(用皮鞋或者小小的照片做界面轮廓)来的。所以半夜就爬起来继续折腾。 无奈,没有找到获取鼠标焦点的好方法,都太复杂...
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章