找了一些关于防治画面闪烁的双缓冲方法,但是都是在单文档中的使用,我在对话框里试了一下,没有成功。
   
   想问一下双缓冲绘图能不能在对话框中使用,怎么使用? (我是在对话框的Picture控件上绘图)。
   多谢!

解决方案 »

  1.   

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

  2.   

    出现一个问题 
    我添加OnEraseBkgnd重载函数后,整个对话框全部变成透明(或是白色的)的了,这是怎么回事〉
    OnEraseBkgnd函数的作用是什么?
    我只需要对对话框上的Pictur区域绘图,并防止闪烁。
      

  3.   

    OnEraseBkgnd是刷新背景,直接返回非0值就表示不执行刷新背景操作。
    你应该处理Picture控件的WM_PAINT消息,或者将其设置为OwnerDraw然后响应对话框的WM_DRAWITEM消息。
      

  4.   

    baidu: 重载OnEraseBkgnd()函数,让其直接返回TRUE。可以禁止系统擦除你的窗口。为什么对话框变成透明的呢
      

  5.   

    OnEraseBkgnd就是把对话框整个用背景色填充,如果不填充就等于是对话框没有背景,那么控件之外(以及透明背景控件)因为没有画任何东西,所以就看到对话框后面的东西了。
      

  6.   

    可以,可以处理OnEraseBkgnd和OnPaint