捕捉屏幕的时候包含鼠标

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

讨论参见http://search.csdn.net/expert/topicview1.asp?id=2307620

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

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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航