由于VC6没有封装内存DC,要想写出漂亮的界面就会比较困难,也会导致屏幕的闪烁,封装好这个类以后再去开发软件就会简单很多,今天我们就来构造一个属于我们自己的内存DC。
加载位图的方式有很多种,首先写一个从资源中加载位图的函数。
BOOL LoadBitmap(UINT nBitmapID,CDC* pDC=NULL)
{
CBitmap bitmap;
bitmap.LoadBitmap(nBitmapID);
BITMAP bm;
bitmap.GetBitmap(&bm);
m_size.cx = bm.bmWidth;
m_size.cy = bm.bmHeight;
CreateCompatibleDC(pDC);
SelectObject(bitmap);
return TRUE;
}
然后构造一个从文件加载位图的函数。
BOOL LoadBitmap(LPCSTR szBitmapFile,CDC* pDC=NULL)
{
HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
szBitmapFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
BITMAP bm;
GetObject(hBitmap,sizeof(bm),&bm);
m_size.cx = bm.bmWidth;
m_size.cy = bm.bmHeight;
CreateCompatibleDC(pDC);
SelectObject(hBitmap);
return TRUE;
}
我们还需要创建一张空白的画布,这个函数在解决闪烁的时候需要用到。
BOOL Create(int cx,int cy,CDC* pDC = NULL)
{
加载位图的方式有很多种,首先写一个从资源中加载位图的函数。
BOOL LoadBitmap(UINT nBitmapID,CDC* pDC=NULL)
{
CBitmap bitmap;
bitmap.LoadBitmap(nBitmapID);
BITMAP bm;
bitmap.GetBitmap(&bm);
m_size.cx = bm.bmWidth;
m_size.cy = bm.bmHeight;
CreateCompatibleDC(pDC);
SelectObject(bitmap);
return TRUE;
}
然后构造一个从文件加载位图的函数。
BOOL LoadBitmap(LPCSTR szBitmapFile,CDC* pDC=NULL)
{
HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
szBitmapFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
BITMAP bm;
GetObject(hBitmap,sizeof(bm),&bm);
m_size.cx = bm.bmWidth;
m_size.cy = bm.bmHeight;
CreateCompatibleDC(pDC);
SelectObject(hBitmap);
return TRUE;
}
我们还需要创建一张空白的画布,这个函数在解决闪烁的时候需要用到。
BOOL Create(int cx,int cy,CDC* pDC = NULL)
{