VC获取当前鼠标图片

对于warning C4005: 'WINVER' : macro redefinition的处理

 在Windows.h中有如下定义:   
  #ifndef   WINVER   
  #define   WINVER   0x0400   
  #endif   
  如果你把#define   WINVER   0x500置于#include   之前,就不会出现警告.   

需要包含的文件:#include "Winuser.h"

HCURSOR GetCur()
{
    CURSORINFO hCur;
//	HCURSOR hCur;
    ZeroMemory(&hCur,sizeof(hCur));
    hCur.cbSize=sizeof(hCur);
    GetCursorInfo(&hCur);
    return hCur.hCursor;
}

void CMy123Dlg::OnButton1() 
{
	Sleep(2000);
	//warning:   this   code   snippet   is   not   bullet   proof. 
	HCURSOR   hcur   =   GetCur();//::GetCursor(); 
	
	if(hcur==NULL) 		return; 
	ICONINFO     icon; 
	::GetIconInfo(hcur,&icon); 
	HBITMAP   hbmp; 
	BITMAP   bm; 
	::GetObject(icon.hbmMask,sizeof(BITMAP),&bm); 
	
	HDC   hGlobal,hDCMask,hDCColor; 
	hGlobal   =   ::GetDC(NULL); 
	hDCMask   =   ::CreateCompatibleDC(hGlobal); 
	hDCColor  =   ::CreateCompatibleDC(hGlobal); 
	hbmp	  =   ::CreateCompatibleBitmap(hGlobal,bm.bmWidth,bm.bmWidth); 
	::SelectObject(hDCColor,hbmp); 
	
	::FloodFill(hDCColor,0,0,RGB(255,255,255));//背景色 
	::SelectObject(hDCMask,icon.hbmMask); 
	::BitBlt(hDCColor,0,0,bm.bmWidth,bm.bmWidth,hDCMask,0,0,SRCAND); 
	if   (icon.hbmColor   ==   NULL) 
		::BitBlt(hDCColor,0,0,bm.bmWidth,bm.bmWidth,hDCMask,0,bm.bmWidth,SRCINVERT); 
	else 
	{ 
		::SelectObject(hDCMask,icon.hbmColor); 
		::BitBlt(hDCColor,0,0,bm.bmWidth,bm.bmWidth,hDCMask,0,0,SRCINVERT); 
	} 
	
	PICTDESC   picdesc; 
	picdesc.cbSizeofstruct   =   sizeof(PICTDESC); 
	picdesc.picType   =   PICTYPE_BITMAP   ;                         
	picdesc.bmp.hbitmap   =   hbmp; 
	IPicture*   pPicture=NULL; 
	OleCreatePictureIndirect(&picdesc,   IID_IPicture,   TRUE,(VOID**)&pPicture); 
	LPSTREAM   pStream; 
	CreateStreamOnHGlobal(NULL,TRUE,&pStream); 
	LONG   size; 
	HRESULT   hr=pPicture-> SaveAsFile(pStream,TRUE,&size); 
	char   pathbuf[1024]; 
	strcpy(pathbuf, "c:\\myarrow.bmp "); 
	
	FILE   *stream; 
	stream   =   fopen(   pathbuf,   "w "   ); 
	LARGE_INTEGER   li; 
	li.HighPart   =0; 
	li.LowPart   =0; 
	ULARGE_INTEGER   ulnewpos; 
	pStream-> Seek(   li,STREAM_SEEK_SET,&ulnewpos); 
	ULONG   uReadCount   =   1; 
	while(uReadCount> 0) 
	{ 
		
		pStream-> Read(pathbuf,sizeof(pathbuf),&uReadCount); 
		if(uReadCount> 0) 
			fwrite(   pathbuf,sizeof(char),uReadCount,stream); 
	} 
	pStream-> Release(); 
	fclose(   stream   ); 
	
	::DeleteObject(icon.hbmMask); 
	if   (icon.hbmColor   !=   NULL) 
		::DeleteObject(icon.hbmColor); 
	::DeleteObject(hbmp); 
	::ReleaseDC(NULL,hDCMask); 
	::ReleaseDC(NULL,hDCColor); 
	::ReleaseDC(NULL,hGlobal);
	AfxMessageBox(_T("OK"));
}

CBitmap   bmp; 
CDC   memDC; 
memDC.CreateCompa... 
memDC.SelectObiect(bmp) 
memDC.GetPixel(x,   y)

转载于:https://www.cnblogs.com/rogee/archive/2011/03/26/1996573.html

你可能感兴趣的:(VC获取当前鼠标图片)