4.1 图标资源、光标资源

图标资源

添加资源

  • 添加资源(可视化完成)
    注意图标的大小,一个图标文件中,可以有多个不同大小的图标。
  • 加载
    LoadIcon 是 Windows API 中用于加载图标资源的函数
HICON WINAPI LoadIcon(
  HINSTANCE hInstance,
  LPCTSTR lpIconName
);

参数说明
1.hInstance:

  • 类型:HINSTANCE
  • 描述:表示图标资源所在模块的实例句柄。如果要加载系统预定义的图标,此参数必须设置为 NULL。

lpIconName:

  • 类型:LPCTSTR
  • 描述:指定要加载的图标资源名或资源标识符(资源ID)。资源标识符应为 16 位整数,低 16 位为标识符,高 16 位为0。可以使用宏 MAKEINTRESOURCE 将资源标识符转换为字符串类型。

预定义图标标识符:

  • IDI_APPLICATION: 默认应用程序图标
  • IDI_ASTERISK: 星状图标
  • IDI_ERROR: 错误图标
  • IDI_EXCLAMATION: 感叹号图标
  • IDI_HAND: 手型图标
  • IDI_INFORMATION: 信息图标
  • IDI_QUESTION: 问号图标
  • IDI_SHIELD: 安全防护罩图标
  • IDI_WARNING: 警告图标
  • IDI_WINLOGO:Windows Logo 图标

返回值

  • 如果成功,返回新加载图标的句柄(HICON)。
  • 如果失败,返回 NULL。可以通过调用 GetLastError 获取更多错误信息。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何使用

我们删除多余的画布
然后只留下我们画的红球和黑球
在这里插入图片描述
编译运行
在这里插入图片描述
这里是系统自己选择的,即左上角用黑球,TAB的时候程序图标用红球

光标资源

  • 添加光标资源
    光标的大小默认是32X32像素,每个光标有HotSpot,是当前鼠标的热点(就是鼠标箭头的尖儿)
  • 加载资源(可视化完成)
    LoadCursor 是 Windows API 中用于加载光标资源的函数
HCURSOR LoadCursor(
  HINSTANCE hInstance,
  LPCSTR lpCursorName
);

参数说明
1.hInstance:

  • 类型:HINSTANCE
  • 描述:表示光标资源所在模块的实例句柄。如果要加载系统预定义的光标,此参数应设置为 NULL。

2.lpCursorName:

  • 类型:LPCSTR
  • 描述:指定要加载的光标资源名或资源标识符。可以使用字符串形式的资源名称或整数形式的资源标识符。

预定义光标标识符:

  • IDC_ARROW: 默认箭头光标
  • IDC_IBEAM: 文本选择光标
  • IDC_WAIT: 等待光标(沙漏)
  • IDC_CROSS:十字光标
  • IDC_HAND: 手型光标
  • IDC_SIZE: 调整大小光标
  • IDC_APPSTARTING: 应用程序启动光标

返回值

  • 如果成功,返回新加载光标的句柄(HCURSOR)。
  • 如果失败,返回 NULL。可以通过调用 GetLastError 获取更多错误信息。

另一种方法:

  • 设置光标资源
    SetCursor函数是Windows API中用于设置当前光标形状的函数。它允许程序动态地改变鼠标指针的外观。
    SetCursor函数通常在响应WM_SETCURSOR消息时使用,以便在不同的窗口区域显示不同的光标。
HCURSOR SetCursor(HCURSOR hCursor);

参数说明:

hCursor:

  • 类型:HCURSOR
  • 描述:要设置的新光标的句柄。这个句柄通常是通过LoadCursor或CreateCursor函数获得的。

返回值:

  • 返回值是先前的光标句柄。如果之前没有设置光标,返回值为NULL。

功能描述:

  • SetCursor函数设置鼠标光标的形状。新的光标会立即显示。 当鼠标移动时,Windows通常会自动重置光标为窗口类的光标。
    如果hCursor参数为NULL,则会隐藏光标。

WM_SETCURSOR消息

WM_SETCURSOR是Windows消息系统中的一个重要消息,用于控制鼠标光标的外观。当鼠标移动或窗口状态改变时,系统会发送这个消息,让应用程序有机会设置适当的光标。

消息参数:

  • wParam: 包含鼠标消息的窗口句柄,即当前使用的光标句柄
  • lParam: 低位字(LOWORD)包含命中测试代码,即光标当前在哪个区域活动;高位字(HIWORD)包含触发此消息的鼠标消息ID

返回值:

  • 如果窗口过程处理了此消息,应返回TRUE
  • 如果希望默认窗口过程处理此消息,应返回FALSE

添加资源

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何使用

在这里插入图片描述
使用SetCursor来实现动态的更改光标
既然要实现不同的区域显示不同的光标,首先需要多个光标
这里再随便添加一个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include "resource.h"
HINSTANCE g_hInstance = 0;	//定义全局变量接收WinMain的第一个变量
//窗口处理函数(自定义,处理消息)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam)
{
	switch (msgID)
	{
	case WM_SETCURSOR:
	{
		HCURSOR hCur = LoadCursor(g_hInstance, (char*)IDC_CURSOR2);//黑方块图标
		if (LOWORD(lParam) == HTCLIENT)//如果光标在客户区
		{
			SetCursor(hCur);
			return 0;
		}
		else//非客户区
		{

		}
	}
	break;
	case WM_DESTROY:
		PostQuitMessage(0);//向应用程序的消息队列发送WM_QUIT消息的函数
		break;
	}
	return DefWindowProc(hWnd, msgID, wParam, lParam);//给消息做默认处理
}
//入口函数
int CALLBACK WinMain(_In_ HINSTANCE hIns, _In_opt_ HINSTANCE hPreIns, _In_ LPSTR lpCmdLine, _In_  int nCmdShow)
{
	g_hInstance = hIns;
	//注册窗口类(向向操作系统写入一些数据)
	WNDCLASS wc = { 0 };
	wc.cbClsExtra = 0;	//申请缓冲区
	wc.cbWndExtra = 0; //申请缓冲区
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);	//窗口背景色
	wc.hCursor = LoadCursor(hIns, (char*)IDC_CURSOR1);	//光标,NULL表示默认由系统指定
	wc.hIcon = LoadIcon(hIns, (char*)IDI_ICON1);	//图标,NULL表示默认图标,即窗口左上角小图标
	wc.hInstance = hIns;		//当前程序实例句柄  ******
	wc.lpfnWndProc = WndProc;		//窗口处理函数名
	wc.lpszClassName = "Main";   //窗口类名字   ******
	wc.lpszMenuName = NULL;		//无菜单
	wc.style = CS_HREDRAW | CS_VREDRAW;	//当窗口宽度货高度发生改变时,重绘整个窗口
	RegisterClass(&wc);	//将以上所有赋值全部写入操作系统

	//在内存中创建窗口
	HWND hWnd = CreateWindowEx(0, "Main", "windows", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hIns, NULL);
	//显示窗口
	ShowWindow(hWnd, SW_SHOW);
	UpdateWindow(hWnd);	//刷新窗口
	//消息循环
	MSG nMsg = { 0 };
	while (GetMessage(&nMsg, NULL, 0, 0))
	{
		TranslateMessage(&nMsg);
		DispatchMessage(&nMsg);	//将消息交给窗口处理函数来处理
	}
	return 0;
}
  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里捡到一只猫丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值