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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值