关于如何拷贝屏幕并保存,这里已经有现成的例子,我也不必去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

本文介绍了如何在Win32环境下使用BitBlt和StretchBlt函数来抓取屏幕内容,并将其复制到窗口的客户区域。讲解了获取屏幕和窗口设备上下文(DC)、屏幕尺寸、窗口客户区尺寸的方法,以及 StretchBlt 的用法,包括源和目标区域参数及复制标志。最后讨论了不同复制标志导致的反色效果及其原理。
最低0.47元/天 解锁文章
929

被折叠的 条评论
为什么被折叠?



