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

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

>> 方法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);
}
}



原文地址:https://www.cnblogs.com/carl2380/p/2317371.html