通过程序设置鼠标的样式

在编写程序中(尤其是游戏),有时候需要使用个性的鼠标样式,本文就讲解怎样实现该功能。

实现这个功能需要两步:

  1. 加载鼠标样式,并获取其句柄(HCURSOR);
  2. 设置窗口类的鼠标样式为第一步获取到的句柄。

下面详细解释一下这两步:

一、获取鼠标样式的句柄

使用 API 函数 LoadCursor 实现加载鼠标样式。该函数可以读取系统默认的样式,也可以加载资源形式的 .cur 鼠标样式图片,还可以通过 API 函数 LoadImage 加载文件形式的鼠标样式图片。

涉及到的函数原型如下:

HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName);
HMODULE GetModuleHandle(LPCTSTR lpModuleName);
HANDLE LoadImage(HINSTANCE hinst, LPCTSTR lpszName, UINT uType, int cxDesired, int cyDesired, UINT fuLoad);
(详细参数及各种用法请参考 MSDN)

下面分别举例:

(1) 加载系统默认的十字样式的鼠标:

HCURSOR hcur = LoadCursor(NULL, IDC_CROSS);

(2) 加载资源中的鼠标样式图片:

HMODULE hmod = GetModuleHandle(NULL);  // 获取当前进程的句柄
HCURSOR hcur = LoadCursor(hmod, _T("MyCursor")); // 加载资源中的鼠标样式图片
// 注:请先将 .cur 格式的图片添加到系统资源文件中,并命名为 "MyCursor"。

(3) 加载 c:\\test.cur 作为鼠标样式:

HCURSOR hcur = (HCURSOR)LoadImage(NULL, _T("C:\\test.cur"), IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE);

二、设置窗口类的鼠标样式

使用 SetClassLong 设置窗口类,使用 GetHWnd() 返回窗口句柄。两个函数的原型如下:

DWORD SetClassLong(HWND hWnd, int nIndex, LONG dwNewLong);
HWND GetHWnd();  // EasyX 惊蛰版中定义的函数

使用方法举例如下:

HWND hwnd = GetHWnd();    // 获取绘图窗口句柄
SetClassLong(hwnd, GCL_HCURSOR, (long)hcur); // 设置绘图窗口内的鼠标样式

三、下面是一个完整的范例:


// 程序名称:设置鼠标样式的范例
// 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版
//
#include <graphics.h>
#include <conio.h>

void main()
{
	initgraph(640, 480);							// 创建绘图窗口

	HCURSOR hcur = LoadCursor(NULL, IDC_CROSS);		// 加载系统预置的鼠标样式
	HWND hwnd = GetHWnd();							// 获取绘图窗口句柄
	SetClassLong(hwnd, GCL_HCURSOR, (long)hcur);	// 设置窗口类的鼠标样式

	// 按任意键退出
	getch();
	closegraph();
}
ATL:
工程中添加IDC_Hand_Cursor         CURSOR                  "res\\Move_Hnd.cur"

#define IDC_Hand_Cursor                    3020
//HCURSOR hcur = (HCURSOR)LoadImage(NULL, _T("C:\\Link_Hnd.cur"), IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE);//ok
//SetClassLong(GetHWND(), GCL_HCURSOR, (long)hcur);
_U_STRINGorID cur(IDC_Hand_Cursor);
HCURSOR hcur = AtlLoadCursor(cur);
SetCursor(hcur);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值