Screen Capture

#define PW_WINDOW          9001
#define PW_CLIENT             9002

HBITMAP CMyProgramDlg::CopyScreenToBitmap(LPRECT lpRect)
{
	HDC         hScrDC, hMemDC;         // screen DC and memory DC
	int         nX, nY, nX2, nY2;       // coordinates of rectangle to grab
	int         nWidth, nHeight;        // DIB width and height
	int         xScrn, yScrn;           // screen resolution      

	HGDIOBJ     hOldBitmap , hBitmap;

		// check for an empty rectangle
    if (IsRectEmpty(lpRect))
	   return NULL;
	   // create a DC for the screen and create
	   // a memory DC compatible to screen DC          

   hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
   hMemDC = CreateCompatibleDC(hScrDC);      // get points of rectangle to grab  

   nX = lpRect->left;
   nY = lpRect->top;
   nX2 = lpRect->right;
   nY2 = lpRect->bottom;      // get screen resolution      

   xScrn = GetDeviceCaps(hScrDC, HORZRES);
   yScrn = GetDeviceCaps(hScrDC, VERTRES);      

   //make sure bitmap rectangle is visible      

   if (nX < 0)
	  nX = 0;     

   if (nY < 0)
      nY = 0;     

   if (nX2 > xScrn)
      nX2 = xScrn;     

   if (nY2 > yScrn)
      nY2 = yScrn;      

   nWidth = nX2 - nX;
   nHeight = nY2 - nY;      

   // create a bitmap compatible with the screen DC     

   hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);      

   // select new bitmap into memory DC     

   hOldBitmap =   SelectObject (hMemDC, hBitmap);      

   // bitblt screen DC to memory DC     

   BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);     

   // select old bitmap back into memory DC and get handle to
   // bitmap of the screen          

   hBitmap = SelectObject(hMemDC, hOldBitmap);      

   // clean up      

   DeleteDC(hScrDC);
   DeleteDC(hMemDC);      

   // return handle to the bitmap      

   return (HBITMAP)hBitmap;
}

HBITMAP CYourProgramDlg::CopyWindowToBitmap(CWnd* wnd , HWND hWnd, WORD fPrintArea)
{
	HBITMAP     hBitmap = NULL;  // handle to device-dependent bitmap
	// check for a valid window handle
	if (!hWnd)
	    return NULL; 

    RECT    rectWnd;
    ::GetWindowRect(hWnd, &rectWnd);  

	switch (fPrintArea)
	{
		case PW_WINDOW: // copy entire window
		{
          // get the window rectangle
          // get the bitmap of that window by calling
		  // CopyScreenToBitmap and passing it the window rect
//		  GetWindowRect(&rectWnd);
		  hBitmap = CopyScreenToBitmap(&rectWnd);
		  break;
		}
       case PW_CLIENT: // copy client area
	   {
	     RECT rectClient;
	     POINT pt1, pt2;              // get client dimensions
	     wnd->GetClientRect(&rectClient);              // convert client coords to screen coords
	     pt1.x = rectClient.left;
	     pt1.y = rectClient.top;
	     pt2.x = rectClient.right;
	     pt2.y = rectClient.bottom;
	     wnd->ClientToScreen(&pt1);
	     wnd->ClientToScreen(&pt2);
	     rectClient.left = pt1.x;
	     rectClient.top = pt1.y;
	     rectClient.right = pt2.x;
	     rectClient.bottom = pt2.y;  

         // get the bitmap of the client area by calling
	     // CopyScreenToBitmap and passing it the client rect
	     hBitmap = CopyScreenToBitmap(&rectClient);
	     break;
	   }
	   default:    // invalid print area
	        return NULL;
	}      // return handle to the bitmap     

	return hBitmap;
}

http://forums.codeguru.com/showthread.php?244907-Screen-Capture

时间: 2024-10-03 10:56:43

Screen Capture的相关文章

多功能网页截图 Nimbus Screen Capture 插件 使用说明

日常生活中我们经常会用到截图工具,Windows自带的截图工具可以满足我们的基本需求,QQ的截图工具(快捷键:Ctrl+Alt+A)也满足了我们聊天时的截图需求,Mac下也有很多的截图方法,Linux下的截图软件也很多. 相关阅读:Mac OS X 最全的截图方法集锦 而今天MUZI TECH要分享的是关于网页截图,大多数的截图工具只能截取屏幕显示的网页,却不能截取整个网页的截图.而Nimbus Screen Capture则可以帮你截取整个网页的截图. Nimbus Screen Captur

禁用屏幕拷贝(Print Screen),调用派生的析构函数及其它

我正在开发一个显示图形的程序,该图形具有知识产权,有没有什么办法禁 用屏幕拷贝功能(Print Screen)以防止用户将图像拷贝到剪贴板上? 禁止 屏幕拷贝的办法倒是有一个,但是我得告诉你,要阻止其它应用程序从你的窗口 上复制像素内容是不可能的.许多第三方程序都能捕获屏幕内容,这种程序也不 难写.要想截获屏幕上的像素,你只要用 BitBlt 从屏幕设备上下文中拷贝它们 既可,例如:CWindowDC dc(NULL); // 用 NULL 获取整个屏幕 CDC memdc; ... // 创建

最新图像捕捉工具-FastStone Capture V4.8 下载_常用工具

图片:   图片:   图片:  FastStone Screen Capture (FSCapture) 是一款免费的图像浏览.编辑和抓屏工具,支持包括BMP, JPEG, JPEG 2000, GIF, PNG, PCX, TIFF, WMF, ICO 和TGA在内的所有主流图片格式,其独有的光滑和毛刺处理技术让图片更加清晰,提供缩放.旋转.减切.颜色调整功能.只要点点鼠标就能随心抓取屏幕上的任何东西,拖放支持可以直接从系统.浏览器或其他程序中导入图片,收藏夹功能让你能更好的从eNet收集更

Android 上如何实现矩形区域截屏

对屏幕进行截屏并裁剪有两种方式:早截图和晚截图.早截图,就是先截取全屏,再让用户对截取到的图片进行修改;与之相对的,晚截图,就是先让用户在屏幕上划好区域,再进行截图和裁剪.其实两者并没有什么太大的区别,这篇就说说怎么实现晚截图. 晚截图可以分成三步: 在屏幕上标出截图的矩形区域 调用系统接口截屏 对截图进行裁剪 效果图如下: 矩形区域截屏 第一步.在屏幕上标识出截图区域 首先确定标识截图区域所需要的功能: 手指拖动形成矩形区域; 可以拖动已经划好的矩形区域进行移动; 可以拖动矩形区域的边框调整大

[引用] Eclipse Forms Programming Guide

guid Eclipse Forms Programming GuideInitial creation: 21 February 2004Added table wrap sample: 22 February 2004IntroductionThis document has been written to help you use the new Eclipse 3.0 feature called 'Eclipse Forms'. The content will eventually

17个用于设计开发的chrome扩展工具

大多数设计师和开发人员都选择火狐,因为火狐提供了强大的插件扩展.尽管chrome目前提供的扩展还没不及火狐所提供的,但仍有可能成为设计师和开发者的选择.在某些情况下,他们不如火狐强大(如firebug和firebug lite),但如果你正在使用chrome,你可能会对他们提供的扩展有兴趣,何况chrome用于设计开发的工具正逐步被开发出来.       在这篇文章里,我们将介绍chrome17个用于设计开发的扩展工具.如果有可能的话,希望chrome提供的出色扩展也可与火狐扩展相媲美. Spe

用C#制作作屏幕捕获程序

程序 我们已经了解了Visual Basic或者Delphi等语言是如何来实现对屏幕图象捕获的.那么对于C#来说,是如何实现这种功能的?本文就来探讨一下这个问题. 一. 程序设计开发及运行环境: (1).微软视窗2000服务器版 (2)..Net FrameWork SDK Beta 2 二. 程序设计的关键步骤以及具体的实现方法: (1).首先要创建一个和当前屏幕大小相同的Bitmap对象: 要实现此操作,首先就要现获得当前显示器的DC,然后根据此DC来创建Graphic对象,再由此Graph

多媒体数据库的关键技术问题

多媒体数据模型 多媒体数据模型主要采用文件系统管理方式.扩充关系数据库的方式和面向对象数据库的方式. 文件系统管理方式 多媒体资料是以文件的形式在计算机上存储的,所以用各种操作系统的文件管理功能就可以实现存储管理.Windows的文件管理器或资源管理器不仅能实现文件的存储管理,而且还能实现有些图文资料的修改,演播一些影像资料.为了方便用户浏览多媒体资料,出现很多的图形.图象浏览工具软件.有些在Windows95下的浏览软件还和资源管理器结合起来,如ACDSee工具软件不仅可浏览BMP.GIF.J

Rationa Functional Tester 截图功能在翻译验证测试(TVT)中的应用

1. TVT 简介及其当前主要困难,瓶颈 翻译验证测试(Translation Verification Testing,TVT) 是 IBM 全球化测试中的一个很重要的测试之一,一般会由来自于 TSC(Translation Service Centers)的翻 译人员和来自 GSSC 的 TSE(Translation Service Engineer)合作完成.TVT 主要的工作在于验证翻译的 PII(Program Integrated Information)字符在经过软件产品的重新编