最近在工作中要实现一个截图的功能,由于之前没接触过这类东西,搜索了大部分资料,终于完成了,总结下;
首先,所谓的桌面截图其实并不是在真正的桌面上截图,只是把当前屏幕的图片复制的自己创建的对话框中,作为对话框的背景,然后在自己的对话框中截图,好了废话不多说了,说说实现了;
1 要获取到桌面的截图,首先要获取到桌面的DC,得到桌面dc后,根据桌面dc,创建一个内存兼容的内存dc和内存位图bmp,然后把bmp选入当前内存dc,最后调用BitBlt把桌面dc复制到内存dc中(创建内存dc是为了双缓冲,防止屏幕闪烁)。
HDC dcScreen;
HBITMAP m_bmpScreen;
HBITMAP hOldBitmap;
HDC m_dcMem;
dcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); //创建屏幕设备dc
m_size.cx = GetDeviceCaps(dcScreen, HORZRES);
m_size.cy= GetDeviceCaps(dcScreen, VERTRES);
m_dcMem = CreateCompatibleDC(dcScreen); //创建与设备dc兼容的内存dc
m_bmpScreen = CreateCompatibleBitmap(dcScreen, m_size.cx,m_size.cy);//创建于屏幕dc兼容的位图
hOldBitmap = (HBITMAP)SelectObject(m_dcMem,m_bmpScreen);
BitBlt(m_dcMem, 0, 0,m_size.cx, m_size.cy,dcScreen, 0, 0, SRCCOPY);
2 在对话框的OnPaint函数中,把内存dc复制到对话框dc中,这样对话框就有桌面的图片了
StretchBlt(dc,0,0,m_size.cx, m_size.cy,
m_dcMem,
0,0,m_size.cx, m_size.cy,
SRCCOPY);