zoukankan      html  css  js  c++  java
  • GDI中利用内存画布防止位图闪烁

    昨天晚上博客园好像打不开。。。所以一大早赶快起来补昨天的作业。。。。。

    今天的任务。。。

    1、利用双缓冲实现图片特效(例如:百叶窗,等效果)

    2、利用mciSendCommand这个结构体写一个播放器。。。

    当然是全部封装起来。。。呵呵。。。

    昨天的:

    先建立一个DBuffer对话框工程

    首先创建一个内存画布的对象(CDC)封装起来;

    class CMemDC:public CDC
    {
    private:
     CBitmap m_Bitmap;
     CDC* m_pDC;
     CRect m_Rect;
    public:
     CMemDC(CDC *pDC, const CRect& rect)
     {
      m_pDC = pDC;
      m_Rect = rect;
      m_Bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
      CreateCompatibleDC(pDC);
      SelectObject(m_Bitmap);
     }
     ~CMemDC()
     { 
      m_pDC->BitBlt(0,0,m_Rect.Width(),m_Rect.Height(),this,m_Rect.left,m_Rect.top,SRCCOPY);
     }
    };

    在DBufferDlg.h中声明SetBitmap()方法实现绘图操作

    void CDBufferDlg::SetBitmap()
    {
     CRect rect;
     GetClientRect(&rect);
     CDC *pDC=GetDC();

     CMemDC memDC(pDC,rect);

     CDC cDC;
     cDC.CreateCompatibleDC(pDC);

     cDC.SelectObject(&m_Bitmap[m_Mode]);
     memDC.BitBlt(x,y,m_hBitmap->bmWidth,m_hBitmap->bmHeight,&cDC,0,0,SRCCOPY);
    }

    遇到的问题就是:刚开始没有创建一个内存画布对象,而是在CDBufferDlg类中建立一个方法来实现内存画布

    由此导致了单次创建了内存画布对象,所以仔细看的话还是有一点闪烁的效果。。。。。

  • 相关阅读:
    log4j中Spring控制台输出Debug级信息过多解决方法
    spring使用aop
    过滤器(filter)实现用户登录拦截
    Eclipse将项目部署tomcat的webapps目录
    css初始化样例代码
    dede表单修改默认必填
    DedeCMS提交自定义表单加入验证码功能
    jQuery入门第三天
    jQuery入门第二天
    jQuery入门第一天
  • 原文地址:https://www.cnblogs.com/ccmfc/p/1718279.html
Copyright © 2011-2022 走看看