VC获取当前鼠标图片

本文详细介绍了如何避免在使用Windows.h时遇到的警告C4005('WINVER'宏重新定义)。通过调整预处理器指令的位置,可以有效防止此警告的出现。此外,还提供了一个获取鼠标光标并将其转换为位图的示例代码,展示了如何使用Windows API进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值