- CDC* pScreenDc = CDC::FromHandle(::GetDC(NULL));<span style="white-space:pre"> </span>//屏幕DC
- CDC memDc;<span style="white-space:pre"> </span>// 内存DC
- CBitmap memBmp;
- CBitmap* pOldBmp;
- int cx = GetSystemMetrics(SM_CXSCREEN);
- int cy = GetSystemMetrics(SM_CYSCREEN);
- memDc.CreateCompatibleDC(pScreenDc);
- memBmp.CreateCompatibleBitmap(pScreenDc, cx, cy);
- pOldBmp = memDc.SelectObject(&memBmp);
- memDc.BitBlt(0, 0, cx, cy, pScreenDc, 0, 0, SRCCOPY);
- //复制到剪切板
- OpenClipboard();
- EmptyClipboard();
- SetClipboardData(CF_BITMAP, memBmp.Detach());
- CloseClipboard();
- // 显示到当前界面
- CClientDC clientDc(this);
- CRect rcClient;
- GetClientRect(rcClient);
- clientDc.StretchBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDc, 0, 0, cx, cy, SRCCOPY);
- memDc.SelectObject(pOldBmp);
- memDc.DeleteDC();
- memBmp.DeleteObject();
- BitBlt
- 设备上下文绘图有很多种方法。例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制。此外,还可以使用CDC类的位图函数来输出位图到设备上下文中。
- BitBlt 用于从原设备中复制位图到目标设备,语法格式如下:
- BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
- x:目标矩形区域的左上角x轴坐标点。
- y:目标矩形区域的左上角y轴坐标点。
- nWidth:在目标设备中绘制位图的宽度。
- nHight:在目标设备中绘制位图的高度。
- pSrcDC:源设备上下文对象指针。
- xSrc:源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。
- ySrc:源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。
- dwRop:光栅操作代码
- dwRop有如下选择:
- BLACKNESS 使用黑色填充目标区域
- DSTINVERT 目标矩阵区域颜色取反
- MERGECOPY 使用与运算组合原设备矩形区域的颜色和目标设备的画刷
- MERGEPAINT 使用或运算将反向的源矩形区域的颜色和目标矩形区域的颜色合并
- NOTSRCCOPY 复制源设备区域的反色到目标设备中
- NOTSRCERASE 使用或运算组合源设备区域与目标设备区域的颜色,然后对结果颜色取反
- PATCOPY 复制源设备当前选中的画刷到目标设备
- PATINVERT 使用异或运算组合目标设备选中的画刷和目标设备区域的颜色
- PATPAINT 通过或运算组合目标区域当前选中的画刷和源设备区域反转的颜色
- SRCAND 使用与运算组合源设备和目标设备区域的颜色
- SRCCOPY 直接复制源设备区域到目标设备中
- SRCERASE 使用与运算组合目标设备区域的反色与源设备区域的颜色
- SRCINVERT 使用异或运算组合源设备区域颜色和目标设备区域颜色
- SRCPAINT 使用或运算组合源设备区域颜色和目标设备区域颜色
- WHITENESS 使用白色填充目标区域