>>>改进:可以使用结构来返回多个返回值
>> 方法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);
}
}