a)通过资源ID加载进程内位图:BOOL LoadBitmap(UINT nBitmap, CDC* pDC = NULL);
B)通过文件名加载进程外位图:BOOL LoadBitmap(LPCSTR szFile, CDC* pDC = NULL);
C)在构造对象时加载进程内位图:CMemDC(UINT nBitmap, CDC* pDC = NULL);
D)在构造对象时加载进程外位图:CMemDC(LPCSTR szFile, CDC* pDC = NULL);
E)获取位图信息:int GetWidth();和int GetHeigth();
F)摧毁时检查和处理GDI泄露问题(在析构函数中调用):BOOL DeleteDC();
G)创建一个指定高宽的空白位图:BOOL Create(int cx, int cy, CDC* pDC = NULL);
#pragma once
class My_CMemDC : public CDC
{
CSize m_size;
public:
My_CMemDC()
{
m_size.cx = m_size.cy = 0;
}
My_CMemDC(UINT nBitmap, CDC * pDC = NULL)
{
LoadBitmap(nBitmap, pDC);
}
My_CMemDC(CString szFile, CDC *pDC = NULL)
{
LoadBitmap(szFile, pDC );
}
~My_CMemDC()
{
DeleteDC();
}
int GetWidth(){ return m_size.cx; }
int GetHeight(){ return m_size.cy; }
BOOL DeleteDC()
{
if (!GetSafeHdc())
return FALSE;
CBitmap *pBitmap = GetCurrentBitmap();
if (pBitmap)
pBitmap->DeleteObject();
return CDC::DeleteDC();
}
BOOL Create(int cx, int cy, CDC* pDC = NULL)
{//创建空白位图
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, cx, cy);
CreateCompatibleDC(pDC);
SelectObject(&bmp);
return TRUE;
}
BOOL LoadBitmap(UINT nBitmap, CDC * pDC = NULL)
{
CBitmap bmp;
if (!bmp.LoadBitmap(nBitmap))
return FALSE;
BITMAP bm;
bmp.GetBitmap(&bm);
m_size.cx = bm.bmWidth;
m_size.cy = bm.bmHeight;
CreateCompatibleDC(pDC);
SelectObject(&bmp);
return TRUE;
}
BOOL LoadBitmap(CString szFile, CDC *pDC = NULL)
{
HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, szFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (!hBitmap)
return FALSE;
//CBitmap *pBitmap = CBitmap::FromHandle(hBitmap);
BITMAP bm;
//pBitmap->GetBitmap(&bm);
GetObject(hBitmap, sizeof(bm), &bm);
m_size.cx = bm.bmWidth;
m_size.cy = bm.bmHeight;
CreateCompatibleDC(pDC);
SelectObject(hBitmap);
return TRUE;
}
};