首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

捕捉屏幕的时候包含鼠标

打印文章

分享到:
默认情况下屏幕捕捉下来的内容不包含鼠标的,但是可以把鼠标画到捉下来的图像里面

LPBITMAPINFOHEADER captureScreenFrame(int left,int top,int width, int height,int tempDisableRect)
{
#ifndef _DIRECTX_captureScreenFrame
HDC hScreenDC = ::GetDC(NULL);
#else
theApp.DirectXInit();
#endif

//if flashing rect
if (flashingRect && !tempDisableRect) {

  if (autopan) {    
      
   pFrame->SetUpRegion(left,top,width,height,1);    
   DrawFlashingRect( TRUE , 1);   

  }
  else  
   DrawFlashingRect( TRUE , 0);

}

#ifndef _DIRECTX_captureScreenFrame
HDC hMemDC = ::CreateCompatibleDC(hScreenDC);     
HBITMAP hbm;

    hbm = CreateCompatibleBitmap(hScreenDC, width, height);
HBITMAP oldbm = (HBITMAP) SelectObject(hMemDC, hbm);  
BitBlt(hMemDC, 0, 0, width, height, hScreenDC, left, top, SRCCOPY);   
#else
theApp.DirectXCapture(left, top,width, height);
HDC hMemDC = NULL;
theApp.DirectXGetDC(hMemDC);
#endif

//Get Cursor Pos
POINT xPoint;
GetCursorPos( &xPoint );
HCURSOR hcur= FetchCursorHandle();
xPoint.x-=left;
xPoint.y-=top;


//Draw the HighLight
if (g_highlightcursor==1) {

  POINT highlightPoint;   

  highlightPoint.x = xPoint.x -64 ;
  highlightPoint.y = xPoint.y -64 ;  
  
  InsertHighLight( hMemDC, highlightPoint.x, highlightPoint.y);

}

//Draw the Cursor
if (g_recordcursor==1) {


  
  ICONINFO iconinfo ;
  BOOL ret;
  ret = GetIconInfo( hcur,  &iconinfo );
  if (ret) {

   xPoint.x -= iconinfo.xHotspot;
   xPoint.y -= iconinfo.yHotspot;

   //need to delete the hbmMask and hbmColor bitmaps
   //otherwise the program will crash after a while after running out of resource
   if (iconinfo.hbmMask) DeleteObject(iconinfo.hbmMask);
   if (iconinfo.hbmColor) DeleteObject(iconinfo.hbmColor);

  }  
  
  
  ::DrawIcon( hMemDC,  xPoint.x,  xPoint.y, hcur);        

}
//CString strText=COleDateTime::GetCurrentTime().Format();
//CRect rc(0,0,640,480);
    //DrawText(hMemDC,strText,-1,&rc,DT_LEFT);
#ifndef _DIRECTX_captureScreenFrame  
SelectObject(hMemDC,oldbm);     
LPBITMAPINFOHEADER pBM_HEADER = (LPBITMAPINFOHEADER)GlobalLock(Bitmap2Dib(hbm, bits));
//LPBITMAPINFOHEADER pBM_HEADER = (LPBITMAPINFOHEADER)GlobalLock(Bitmap2Dib(hbm, 24));
#else
theApp.DirectXReleaseDC(hMemDC);
LPBITMAPINFOHEADER pBM_HEADER = (LPBITMAPINFOHEADER)GlobalLock(theApp.DirectXGetCaptureBitmap(bits));
#endif
if (pBM_HEADER == NULL) {
   
  //MessageBox(NULL,"Error reading a frame!","Error",MB_OK | MB_ICONEXCLAMATION);     
  AfxMessageBox(IDS_CAPTURE_FAIL);
  AfxPostQuitMessage(0);
  //exit(1);
}    
#ifndef _DIRECTX_captureScreenFrame  
DeleteObject(hbm);   
DeleteDC(hMemDC);
#endif
//if flashing rect
if (flashingRect && !tempDisableRect) {
  
  if (autopan) {
   DrawFlashingRect(FALSE , 1);
  }
  else
   DrawFlashingRect(FALSE , 0);

}
#ifndef _DIRECTX_captureScreenFrame  
ReleaseDC(NULL,hScreenDC) ;
#else
theApp.DirectXUninit();
#endif
return pBM_HEADER;    
}

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章