修改后的CMemDC类

系统 1931 0

修改后的CMemDC类:(增加了红色的那行,非常重要喔。另外加了些注释)
/////////////////////////////////////////////////////////////////////////////
// CMemDC

class CMemDC : public CDC
{
public:
   CDCHandle     m_dc;          // 屏幕的DC Owner DC
   CBitmap       m_bitmap;      // Offscreen bitmap
   CBitmapHandle m_hOldBitmap;  // Originally selected bitmap
   RECT          m_rc;          // Rectangle of drawing area

   CMemDC(HDC hDC, LPRECT pRect, COLORREF clrBackGround = 0)
   {
      ATLASSERT(hDC!=NULL);
   //保存屏幕的DC到m_dc中
   m_dc = hDC;

      if( pRect!=NULL )
   {
    m_rc = *pRect;
   }
   else
   {
    m_dc.GetClipBox(&m_rc);
   }

   //将被本窗口覆盖了的父窗口的区域填充至本窗口的背景

    //调用CDC的CreateCompatibleDC(),它会给父类CDC的成员变量m_hDC赋值
   CreateCompatibleDC(hDC);
  
      ::LPtoDP(hDC, (LPPOINT) &m_rc, sizeof(RECT)/sizeof(POINT));
   //读取屏幕位图到m_bitmap
      m_bitmap.CreateCompatibleBitmap(hDC, m_rc.right-m_rc.left, m_rc.bottom-m_rc.top);
  
   //CDC选择新位图,并保存旧的位图
      m_hOldBitmap = SelectBitmap(m_bitmap);
   //在CDC中画图,将原先的屏幕复制到内存中
   BitBlt(0, 0, m_rc.right-m_rc.left, m_rc.bottom-m_rc.top, hDC, m_rc.left, m_rc.top, SRCCOPY);

   //设置CDC的背景色为#FF00FF
   SetBkColor(RGB(0,255,0));
      ::DPtoLP(m_dc, (LPPOINT) &m_rc, sizeof(RECT)/sizeof(POINT));
      SetWindowOrg(m_rc.left, m_rc.top);

   //add by Robert
   if(clrBackGround != 0)
   {
  CBrush brush;
  brush.CreateSolidBrush(clrBackGround);
  FillRect(pRect, (HBRUSH)brush);
   }
   //end add
   }
   ~CMemDC()
   {
      // Copy the offscreen bitmap onto the screen.
    //注意,是从父类的m_hDC中复制位图到屏幕
      m_dc.BitBlt(m_rc.left, m_rc.top, m_rc.right-m_rc.left, m_rc.bottom-m_rc.top,
                  m_hDC, m_rc.left, m_rc.top, SRCCOPY);
      // CDC恢复以前的位图 Swap back the original bitmap.
      SelectBitmap(m_hOldBitmap);
   }
};

修改后的CMemDC类


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论