用BitBlt函数从内存中复制位图到窗口中,
case WM_PAINT: //在Paint消息中绘制位图 { PAINTSTRUCT ps = { 0 }; HDC hdc = ::BeginPaint(hWnd, &ps); //TODO:在下面添加画图代码 DrawBmp(hdc);//绘制位图 EndPaint(hWnd, &ps); }break;
void DrawBmp(HDC hdc) { //加载位图 HBITMAP hBmp1 = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); //创建内存DC HDC hMenmdc = CreateCompatibleDC(hdc); //在内存中加载位图,并保存原来的虚拟位图 HGDIOBJ nOldBmp = SelectObject(hMenmdc, hBmp1); //将内存中的位图复制到当前DC中 BitBlt(hdc, 100, 100, 285, 65, hMenmdc, 0, 0, SRCCOPY); //原样绘制,位图大小为:285*65 /*BitBlt函数说明: WINGDIAPI BOOL WINAPI BitBlt( _In_ HDC hdc, //目标DC _In_ int x, //在目标DC绘图时起点X坐标 _In_ int y, //Y坐标 _In_ int cx, //绘图的宽度 _In_ int cy, //绘图的高度, _In_opt_ HDC hdcSrc,//源DC _In_ int x1, //在源DC中要复制的位图起点X坐标 _In_ int y1, //Y坐标 _In_ DWORD rop //复制方式(SRCCOPY) ); 在目标DC上控制位图的宽和高,在源DC中控制位图的起点坐标,就能从位图中截取指定位置的图片了 */ //绘制源DC位图75,15,的位置,宽度100,高度30的位图到目标DC中 BitBlt(hdc, 100, 200, 100, 30, hMenmdc, 75, 15, SRCCOPY); //截取指定区域的位图 //将保存的原来的虚拟位图还给内存DC SelectObject(hMenmdc, nOldBmp); //删除位图句柄 DeleteObject(hBmp1); //删除内存DC DeleteDC(hMenmdc); }
其效果如下:
屏幕也截取出来了,但是如何比较两个位图相同呢?还在查询与学习中,