VC获取当前鼠标图片

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



 在Windows.h中有如下定义:   

  #ifndef   WINVER   

  #define   WINVER   0x0400   

  #endif   

  如果你把#define   WINVER   0x500置于#include   <windows.h>之前,就不会出现警告.   

需要包含的文件:#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)

你可能感兴趣的:(图片)