关于如何拷贝屏幕并保存,这里已经有现成的例子,我也不必去Copy人家了,我一向不喜欢Copy。 这里有一个完整的例子,可以看看。
http://msdn.microsoft.com/EN- US/library/windows/desktop/dd183402(v=vs.85).aspx
把屏幕的内容复制到窗口的客户区域中 ,通常会用BitBlt函数,函数的功能是把一块颜色数据从一个DC复制到另一个DC,这个我也不知道怎么 翻译才能通俗一点。这样说吧,就是从源设备上下文的图形表面截取一个矩形区域并且复制到另一个设 备上下文的区域中。就像我们要做一个截屏工具一样,把屏幕的一部分内容复制到窗口上。
下 面呢,我用另一个函数来进行拷贝——StretchBlt函数,这个函数与BitBlt差不多,不过,它有一点, 就是可以根据目标的区域对源图像进行拉伸。
注意看代码。
{ // 屏幕的DC HDC hdcScreen = GetDC(NULL); // 本窗口的DC HDC hdcWindow = GetDC(hWnd); // 屏幕的宽度 int scrWidth = GetSystemMetrics(SM_CXSCREEN); // 屏幕的高度 int scrHeight = GetSystemMetrics(SM_CYSCREEN); // 窗口的客户区域 RECT rectClient; GetClientRect(hWnd, &rectClient); // 使用StretchBlt进行复制 StretchBlt (hdcWindow,0,0,rectClient.right,rectClient.bottom,hdcScreen,0,0,scrWidth,scrHeight,SRCCOPY ); // 释放DC ReleaseDC(NULL, hdcScreen); ReleaseDC(hWnd, hdcWindow); }
现在,我们要明确,我们是要把屏幕上的东西往窗口区域复制,所以我们想到,必须先有两 个DC,一个是屏幕的DC,另一个就是窗口的DC。DC通过GetDC函数可以获取,将参数设置为NULL,也就 是获得主屏幕的DC句柄了,NULL可以认为获取桌面的DC。
获取到DC后,我们还必须知道源区域 的宽度和高度,以及目标窗口区域的宽度和高度。
源区域是屏幕,所以我们只要知道了当前屏 幕的高度和宽度就可以了,GetSystemMetrics(SM_CXSCREEN)返回当前屏幕的宽度,GetSystemMetrics (SM_CYSCREEN)获得当前屏幕的高度。
而窗口的区域大小呢?我们不妨先得到窗口客户区域的矩 形大小,用GetClientRect函数填充一个RECT结构体,这个结构体的right成员就是窗口客户区域的宽度 ,bottom成员就是窗口客户区域的高度了。
好了,有了这些基本参数,后面的事情就好办了。
BOOL StretchBlt( _In_ HDC hdcDest, _In_ int nXOriginDest, _In_ int nYOriginDest, _In_ int nWidthDest, _In_ int nHeightDest, _In_ HDC hdcSrc, _In_ int nXOriginSrc, _In_ int nYOriginSrc, _In_ int nWidthSrc, _In_ int nHeightSrc, _In_ DWORD dwRop);
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, getdc
, 窗口
, 区域
, 屏幕
, 一个
, 宽度
获得屏幕宽度
,以便于您获取更多的相关知识。