• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
张纯睿
博客园    首页    新随笔    联系   管理    订阅  订阅

双缓存图片显示常用函数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);
}
}



posted @ 2012-01-09 17:38  张纯睿  阅读(151)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3