早教吧 育儿知识 作业答案 考试题库 百科 知识分享

GetSrcBit(dc.mhDC,Width,Height)是什么函数,干什么用的?

题目详情
GetSrcBit(dc.m_hDC,Width,Height)是什么函数,干什么用的?
▼优质解答
答案和解析
// 从一个设备,获取其(0,0)-(BitWidth,BitHeight)这个矩形的像素,存储到一个新创建的内存位图中,并返回.
HBITMAP GetSrcBit(HDC hDC,DWORD BitWidth,DWORD BitHeight)
{
HDC hBufDC;
HBITMAP hBitmap,hBitTemp;
hBufDC = CreateCompatibleDC(hDC); // 创建一个和hDC(一般是屏幕)兼容的内存DC
hBitmap = CreateCompatibleBitmap(hDC,BitWidth,BitHeight); // 创建一个和hDC兼容的空位图(例如,hDC是16位彩色,这个hBitmap也是16位彩色;hDC是24位彩色,这个hBitmap也是16位彩色)
hBitTemp = (HBITMAP) SelectObject(hBufDC,hBitmap); // 把内存DC和空位图绑定,内存DC的原始的位图句柄被hBitTemp暂时保存起来.
StretchBlt(hBufDC,0,0,BitWidth,BitHeight,hDC,0,0,BitWidth,BitHeight,SRCCOPY); // 将hDC的一个矩形位图复制到内存DC中(其实就是复制到和内存DC绑定的空位图中,现在它就不再是空位图了)
hBitmap = (HBITMAP) SelectObject(hBufDC,hBitTemp); // 内存DC选择和原先的原始位图再次绑定,把刚刚获得像素的位图踢出来,还给hBitmap.
::DeleteDC(hBufDC); // 删除内存DC(同时也会删除它绑定的位图.这就是为什么上面要把位图踢出来的原因,为了避免一起死.)
return hBitmap; // 将这个位图返回.不过外界用完这个位图,要记得释放它.
}