精通Visual C++图象编程---读书笔记6.1

 绘制DIB:直接在DIB进行GDI操作
   Win32 SDK和MFC都提供大量的GDI操作函数,如能直接在DIB处理中使用这些函数,将大大提高DIB的处理能力,作为CDib类的一大特色,CDib类设计了一种巧妙的方式来实现直接绘制DIB,即在DIB中进行GDI操作.
   对GDI操作进行分析可发现,几乎所有的GDI操作都是对设备上下文来进行的(HDC/CDC、CPaintDC、CWindowDC、CClientDC).我们的基本思想是,创建一个内存设备上下文(m_pMemDC),并将DIB对应的DDB(m_pBitmap)选进m_pMemDC;在外部程序中,针对该内存设备上下文所做的任何操作都将反映在m_pBitmap中;操作完成后,根据m_pBitmap相关的DIBSECTION句柄m_hBitmap更新DIB,使实现了DIB的绘制.CDib的这一功能由函数BeginPaint和EndPaint实现.
    BeginPaint创建内存设备上下文m_pMemDC,将m_pBitmap选进m_pMemDC,并向外界返回m_pMemDC,供外界进行GDI操作 .
    CDC* CDib::BeginPaint(CDC *pDC)
  {
       m_pMemDC=new CDC;
       m_pMemDC->CreateCompatibleDC(pDC);
       m_pPaletteTmp=m_pMemDC->SelectPalette(m_pPalette,TRUE);
       m_pMemDC->RealizePalette();
       m_pBitmapTmp=(CBitmap*)m_pMemDC->SelectObject(m_pBitmap);
      return m_pMemDC;
}
   EndPaint 函数用于结束GDI操作,包括删除m_pMemDC,根据m_hBitmap更新DIB:
void CDib::EndPaint()
{
      m_pMemDC->SelectObject(m_pBitmapTmp);
      m_pMemDC->SelectPalette(m_pPaietteTmp,TRUE);
      delete m_pMemDC;
    
       Create(m_hbitmap);
}
 
 
 
}
 
 
 
 
 
 
  }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值