关于闪烁的问题(双缓冲也不行呀!!)!!请个位大侠指点!!小弟必拱手献上100分以表谢意!!

crgxw 2004-09-07 09:08:04
我在"桌面\属性\效果\"选择了"拖动时显示窗口内容"(必须选)

然后作了一个基于CFormView的一个工程,用双缓冲画了一条曲线,

可是在用鼠标拖动右下角改变窗体的大小时会出现严重的闪烁,请个位大侠指点!!

小弟深表感谢!!

最好有原码发送到
Email:cr-gxw@163.net
crgxw@163.com
...全文
275 9 打赏 收藏 转发到动态 举报
写回复
用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。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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