双缓冲绘图能在对话框中使用吗?

zxd_001 2008-04-01 06:53:56
找了一些关于防治画面闪烁的双缓冲方法,但是都是在单文档中的使用,我在对话框里试了一下,没有成功。

想问一下双缓冲绘图能不能在对话框中使用,怎么使用? (我是在对话框的Picture控件上绘图)。


多谢!
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
txk1452 2008-04-02
  • 打赏
  • 举报
回复
可以,可以处理OnEraseBkgnd和OnPaint
用户 昵称 2008-04-02
  • 打赏
  • 举报
回复
跟什么界面无关。
cnzdgs 2008-04-02
  • 打赏
  • 举报
回复
OnEraseBkgnd就是把对话框整个用背景色填充,如果不填充就等于是对话框没有背景,那么控件之外(以及透明背景控件)因为没有画任何东西,所以就看到对话框后面的东西了。
zxd_001 2008-04-02
  • 打赏
  • 举报
回复
baidu: 重载OnEraseBkgnd()函数,让其直接返回TRUE。可以禁止系统擦除你的窗口。为什么对话框变成透明的呢
cnzdgs 2008-04-02
  • 打赏
  • 举报
回复
OnEraseBkgnd是刷新背景,直接返回非0值就表示不执行刷新背景操作。
你应该处理Picture控件的WM_PAINT消息,或者将其设置为OwnerDraw然后响应对话框的WM_DRAWITEM消息。
zxd_001 2008-04-02
  • 打赏
  • 举报
回复
出现一个问题
我添加OnEraseBkgnd重载函数后,整个对话框全部变成透明(或是白色的)的了,这是怎么回事〉
OnEraseBkgnd函数的作用是什么?
我只需要对对话框上的Pictur区域绘图,并防止闪烁。
zxd_001 2008-04-01
  • 打赏
  • 举报
回复
刚刚baidu了一下
知道问题所在了
明天上班试试。

在对话框下,最主要的是找不到ON_WM_ERASEBKGND()消息的映射。所以这个需要手动加入。
在.h文件中加入:afx_msg BOOL OnEraseBkgnd(CDC* pDC);
在.cpp文件消息映射中加入: ON_WM_ERASEBKGND()
再添上函数:
BOOL CPaintPicture::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}

cnzdgs 2008-04-01
  • 打赏
  • 举报
回复
当然可以用了,你没成功具体是什么情况?

19,470

社区成员

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

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