2025年4月5日 星期六 乙巳(蛇)年 正月初六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

通过程序设置鼠标的样式

时间:12-13来源:作者:点击数:26
CDSY,CDSY.XYZ

概述

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

实现这个功能需要两步:

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

详细步骤

一、加载鼠标样式,并获取其句柄(HCURSOR)

使用 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);

注:鼠标样式文件 .cur 需要用特殊绘图软件制作。例如,免费的 Greenfish Icon Editor 可以用来制作一个特殊的 .cur 文件。

(4) 隐藏鼠标样式:

方法同 (3),只需要加载一张空白的 .cur 文件即可。

二、设置窗口类的鼠标样式为第一步获取到的句柄

首先,获得窗口句柄。可以通过 initgraph() 的返回值或者 GetHWnd() 返回绘图窗口的句柄。

然后,使用 SetClassLongPtr 函数设置窗口类(注:早期版本的编译器例如 VC6 请使用 SetClassLong 函数设置)。几个函数的原型如下:

  • HWND initgraph(int width, int height, int flag = NULL); // EasyX 函数
  • HWND GetHWnd(); // EasyX 函数
  • ULONG_PTR SetClassLongPtr(HWND hWnd, int nIndex, LONG_PTR dwNewLong); // Windows API 函数
  • DWORD SetClassLong(HWND hWnd, int nIndex, LONG dwNewLong); // Windows API 函数(因版本太老已废弃)

使用方法举例如下:

  • HWND hwnd = GetHWnd(); // 获取绘图窗口句柄
  • SetClassLongPtr(hwnd, GCLP_HCURSOR, (long)hcur); // 设置绘图窗口内的鼠标样式
  • // SetClassLong(hwnd, GCL_HCURSOR, (long)hcur); // 设置绘图窗口内的鼠标样式(老版本编译器请使用这行)

完整的范例

  • ////////////////////////////////////////////
  • // 程序名称:设置鼠标样式的范例
  • // 编译环境:Visual C++ 6.0~2022,EasyX_20220116
  • //
  • #include <graphics.h>
  • #include <conio.h>
  • int main()
  • {
  • HWND hwnd = initgraph(640, 480); // 创建绘图窗口,并返回窗口句柄
  • HCURSOR hcur = LoadCursor(NULL, IDC_CROSS); // 加载系统预置的鼠标样式
  • SetClassLongPtr(hwnd, GCLP_HCURSOR, (long)hcur); // 设置窗口类的鼠标样式
  • // SetClassLong(hwnd, GCL_HCURSOR, (long)hcur); // 设置窗口类的鼠标样式(老版本编译器请使用这行)
  • // 按任意键退出
  • _getch();
  • closegraph();
  • return 0;
  • }
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐