4.1 图标资源、光标资源

news2024/9/24 14:35:10

图标资源

添加资源

  • 添加资源(可视化完成)
    注意图标的大小,一个图标文件中,可以有多个不同大小的图标。
  • 加载
    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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客JS题(二十七)Getter

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; class基础用法getter的应用setter的应用 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charsetutf-8></head><body><script type"text/javascript&qu…

机器人帮助文档

文章目录 机器交流使用群使用图例1. 查看机器人使用文档2. 直接问问题&#xff08;系统默认AI&#xff09;3. 系统默认AI切换4. 直接问问题&#xff08;指定讯飞星火AI&#xff09;5. 直接问问题&#xff08;指定百度文心AI&#xff09;6. 直接问问题&#xff08;指定谷歌AI&am…

Python的全局变量

我来举个例子 像下面&#xff0c;我把全局变量写在函数外面&#xff0c;导致func函数里得不到变量 正确做法应该是在函数内引入全局变量&#xff0c;利用global关键字 请注意&#xff01;由于1的操作导致全局变量发生改变&#xff0c;可能会影响到其他引用全局变量的地方。这点…

基于统计检验与机器学习研究客户对保险兴趣的因素

1.项目背景 保险单是一种安排&#xff0c;公司承诺为特定的损失、损坏、疾病或死亡提供赔偿保证&#xff0c;以换取支付指定的保费。保费是客户需要定期向保险公司支付的一笔钱&#xff0c;以提供此保证&#xff0c;与医疗保险一样&#xff0c;也有车辆保险&#xff0c;客户每…

【Python】requests获取网络响应的时候,遇到url超过最大重试次数的解决方法

我们在使用requests连接网址后&#xff0c;获取网络响应的时候&#xff0c;有时候可能会遇到这样的问题&#xff1a; 问题&#xff1a; Maxretries exceeded with url: /tags-%E9%A1%B9%E7%9B%AE-5.html(Caused by SSLError(SSLEOFError(8,‘EOFoccurred in violation of prot…

大模型层数过多影响

当层数过多时候&#xff0c;梯度是累乘关系&#xff0c;如100 最后可能超过f16精度 梯度爆炸 后面梯度和权重值特别大 梯度消失 后台梯度和权重趋近于0 梯度合理范围e-6 到 e3 优化方法 1、优化点 乘法改为加法 resnet lstm 2、归一 梯度归一&#xff0c;大于小于阈值…

防范 Active Directory 攻击

关注公众号网络研究观获取更多内容。 Active Directory (AD) 是组织 Windows 网络的核心&#xff0c;可默默协调用户访问、身份验证和安全性。 但您真的了解它的工作原理吗&#xff1f;本博客将揭开 AD 的层层面纱&#xff0c;揭示其核心组件以及它们如何实现集中控制。探索 …

【ARM CoreLink 系列 4.2 -- NIC-400 控制器详细介绍】

请阅读【ARM AMBA 总线 文章专栏导读】 文章目录 NIC-400 TopNIC-400 Terminology(术语介绍)AMBA Slave Interface BlockSwitchDefault SlaveInterface BlockGlobal Programmers ViewAMBA Master interface BlockNIC-400 GPV(Global Programmers View)NIC-400 SwitchNIC-400 …

为什么用代理IP访问不了网站?如何解决?

代理IP可以为用户在访问网站时提供更多的便利性和匿名性&#xff0c;但有时用户使用代理IP后可能会遇到无法访问目标网站的问题。这可能会导致用户无法完成所需的业务要求&#xff0c;给用户带来麻烦。使用代理IP时&#xff0c;您可能会因为各种原因而无法访问您的网站。下面小…

柏林噪声(Perlin Noise)

要获得看起来很酷的实心纹理&#xff0c;大多数人使用某种形式的Perlin噪声。Perlin噪声返回类似下图的噪声。 Perlin噪声的一个关键部分是它是可重复的&#xff1a;它接受一个3D点作为输入&#xff0c;并总是返回相同的随机数字。附近的点返回相似的数字。Perlin噪声的另一个重…

Spacedrive :开源跨平台文件管理器!!【送源码】

项目介绍 Spacedrive 是一款革命性的开源跨平台文件管理器&#xff0c;它采用先进的虚拟分布式文件系统 (VDFS) 技术&#xff0c;为你带来前所未有的文件管理体验。无论是云端服务还是离线硬盘&#xff0c;Spacedrive 都能将它们统一在一个易于使用的界面中&#xff0c;让你轻松…

超声波清洗机哪个牌子的好?推荐四款性价比高的超声波眼镜清洗机

眼镜是现代生活中的必需品&#xff0c;但很多人对如何正确清洁眼镜感到困扰。传统清洁方法可能会在清洗过程中损伤眼镜&#xff0c;比如用普通肥皂或清水清洗时容易划伤镜片。为了解决这个问题&#xff0c;家用眼镜超声波清洗机应运而生。然而&#xff0c;市场上品牌繁多&#…

亲测好用!2024年四大ai智能写作工具推荐!

在快节奏的工作生活中&#xff0c;我一直在寻找能够提升写作效率的工具。经过一番探索&#xff0c;我发现了四款AI智能写作工具。它们不仅极大地提升了我的写作速度&#xff0c;还保证了内容的质量。 笔灵AI写作 链接&#xff1a;https://ibiling.cn 作为一名自媒体人&#…

免费高清图片素材库,我推荐这8个~赶紧收藏

找高清图片素材就上这8 个网站&#xff0c;我强推。免费、付费、商用的素材都能找到&#xff0c;赶紧先收藏起来吧&#xff01; 菜鸟图库 美女图片|手机壁纸|风景图片大全|高清图片素材下载网 - 菜鸟图库 网站主要为新手设计师提供免费素材&#xff0c;这些素材的质量都很高…

CSDN博文中的数学公式显示——LaTeX数学公式一般语法

$MarkDown支持&#xff0c;HTML5文本也是支持$定制的。 (笔记模板由python脚本于2024年08月07日 21:18:36创建&#xff0c;本篇笔记适合初通Python&#xff0c;熟悉六大基本数据(str字符串、int整型、float浮点型、list列表、tuple元组、set集合、dict字典)的coder翻阅) 【学习…

explorer.exe没有注册类

管理员身份进入cmd面板 输入sfc /scannow 进行扫描&#xff0c;会自动修复异常文件 验证100% 后&#xff0c;输入 start explorer.exe 进行验证 这个问题就解决了

【Week-G6】CycleGAN-风格迁移网络-pytorch

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 本次学习内容为适用于风格迁移的CycleGAN网络 一、说明 本地文件目录&#xff1a; 程序修改的部分&#xff1a; 二、训练 等待训练完成…

相机标定——小孔成像、相机模型与坐标系

小孔成像 用一个带有小孔的板遮挡在墙体与物之间&#xff0c;墙体上就会形成物的倒影&#xff0c;我们把这样的现象叫小孔成像。 用一个带有小孔的板遮挡在墙体与物之间&#xff0c;墙体上就会形成物的倒影&#xff0c;我们把这样的现象叫小孔成像。前后移动中间的板&#xff…

聚贤国际商会成都分部盛大启航,助力中小企业共克时艰。

近日&#xff0c;聚贤国际商会成都分部在万众瞩目中正式成立&#xff0c;标志着聚贤国际在助力全球中小企业应对经济挑战、实现共同发展的征途上又迈出了坚实的一步。此次成都分部的设立&#xff0c;不仅是对聚贤国际全球布局的重要补充&#xff0c;更是对西南地区中小企业发展…

微信小程序开发【从0到1~入门篇完结】

目录 1.使用 npm 包1.1Vant Weapp1.2API Promise化传统回调函数风格Promise化优势注意事项实现API Promise化 2.全局数据共享3.分包4.案例--自定义tabBar 谢谢您能够坚持看到最后的一篇文章&#xff0c;读完这篇文章后&#xff0c;您已经学会了微信小程序开发的基础知识&#x…