双缓存图片显示常用函数01------CreateMemSrcDC

>>>改进:可以使用结构来返回多个返回值

 

>> 方法1:

CreateMemSrcDC 返回值 -----创建的内存DC

HBITMAP &hBmp -----创建的内存DC选中的图片

HBITMAP &hOldBmp -----创建的内存DC选中的图片前保存的图片

m_hMemSrcDC = CreateMemSrcDC(m_hSrcBmp, m_hOldSrcBmp, pDC, sz.cx+2, sz.cy+2);

 

HDC CLDCText30Control::CreateMemSrcDC(HBITMAP &hBmp, HBITMAP &hOldBmp, CDC * pDC, int width, int height)
{
 CDC *pMemDC = new CDC;
 if (pMemDC->CreateCompatibleDC(pDC))
 {
  pMemDC->SetMapMode(pDC->GetMapMode());
  // create output bmp
  CBitmap *pBmp = new CBitmap();
  BOOL lg = pBmp->CreateCompatibleBitmap(pDC, width, height);
  hOldBmp = (HBITMAP)pMemDC->SelectObject(pBmp)->m_hObject;
  hBmp = (HBITMAP)pBmp->m_hObject;
  return pMemDC->m_hDC;
 }
 else
 {
  delete pMemDC;
  pMemDC=NULL;
  return 0;
 }
}

 

>>方法2:

 HDC  m_hBkPreCtrlMemDC;
 HBITMAP m_hBkPreCtrlBmp;
 HBITMAP m_hOldBmp;


HDC CLDCControl50::CreateMemSrcDC(HDC hDC, int width, int height)
{
 ReleaseMemSrcDC();

 m_hBkPreCtrlMemDC = ::CreateCompatibleDC(hDC);
 if (m_hBkPreCtrlMemDC)
 {
  ::SetMapMode(m_hBkPreCtrlMemDC, ::GetMapMode(hDC));
  // create output bmp
  m_hBkPreCtrlBmp = CreateCompatibleBitmap(hDC, width, height);
  m_hOldBmp = (HBITMAP)SelectObject(m_hBkPreCtrlMemDC, m_hBkPreCtrlBmp);
  return m_hBkPreCtrlMemDC;
 }
 return NULL;
}

void CLDCControl50::ReleaseMemSrcDC()
{
 if (m_hOldBmp != NULL)
 {
  SelectObject(m_hBkPreCtrlMemDC, m_hOldBmp);
  m_hOldBmp = NULL;
 }

 if (m_hBkPreCtrlBmp != NULL)
 {
  DeleteObject(m_hBkPreCtrlBmp);
 }

 if (m_hBkPreCtrlMemDC != NULL)
 {
  DeleteDC(m_hBkPreCtrlMemDC);
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值