第三篇 菜单、图标与光标的使用

Qt设置程序图标,Qt软件打包,生成可运行程序 Qt给程序设置图标 ** 第一步:给项目添加资源 ** 添加ico图标 第二步:在项目目录下新建一个txt,并改名为 xxx.rc,我这里是main.rc 添加如下内容 IDI_ICON1 ICON DISCARDABLE “xxx.ico” 引号里是你的图标名字。 如果你的图标还有一个文件目录,则main.rc更改为 IDI_ICON1 ICON DISCARDABLE “image/main.ico” mian.rc可以添加进去,也可以不添加进去,都不影响。我这里没有添加 第三步:在pro 阅读详情

这篇博文将会简单介绍下菜单、图标与光标在Windows窗口程序中如何使用。

 

一、菜单、图标、光标都是作为资源在资源文件中定义的。

1、菜单的定义方法:

菜单ID  MENU  [DISCARDABLE]

BEGIN

            菜单项定义

END

 

菜单项定义:

定义普通菜单项:

MENUITEM  菜单文字 ,命令ID  [,选项列表]

定义分割线:

MENUITEM  SEPARATOR

定义弹出式菜单:

POPUP  菜单文字  [,选项列表]

BEGIN

           菜单项定义

END

 

2、图标与光标的定义

图标ID  ICON  [DISCARDABLE]   图标文件名

光标ID  CURSOR  [DISCARDABLE]   光标文件名

 

3、注意

所谓的XXID都是用户自定义的一些数值,范围是0~0FFFFH

DISCARDABLE是内存选项,表示在不用时可以自动释放内存

 

4、例子

#include <resource.h>

//菜单选项
#define	IDM_MAIN	0x1000
#define IDM_ICOHEAD	0x2000
#define	IDM_ICOARROW	0x2001
#define	IDM_CURDINOSAUR	0x2002
#define	IDM_CURHAND	0x2003

//图标
#define	ICON_HEAD	0x3000
#define ICON_ARROW	0x3001

//光标
#define	CUR_HAND	0x4000

ICON_ARROW	icon	discardable "Arrow.ico"
ICON_HEAD	icon	discardable "Head.ico"
CUR_HAND	cursor	discardable "Hand.cur"

IDM_MAIN	menu	discardable
BEGIN
		popup	"图标与光标选项(&C)..."
		BEGIN
			menuitem	"头像图标",	IDM_ICOHEAD
			menuitem	"箭头图标",	IDM_ICOARROW
			menuitem	separator
			menuitem	"恐龙光标",	IDM_CURDINOSAUR
			menuitem	"手掌光标",	IDM_CURHAND
		END
END

 

二、在主窗口程序中使用菜单、图标、光标资源

1、如何建立窗口:第二篇 第一个窗口程序

 

2、使用方法

①使用菜单

首先,在获得模块句柄后将菜单(由菜单ID—IDM_MAIN指定)加载进应用程序

		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	LoadMenu,hInstance,IDM_MAIN
		mov	hMenu,eax

其次,在建立窗口时将菜单句柄hMenu作为参数传递进去

		invoke	CreateWindowEx,WS_EX_CLIENTEDGE,\
			offset szClassName,offset szClassName,\
			WS_OVERLAPPEDWINDOW,\
			200,200,300,200,\
			NULL,hMenu,hInstance,NULL


②使用光标与图标的方法

在调用CreateWindowEx建立窗口时,在函数返回前系统会向窗口程序发出WM_CREATE消息。我们可以

此时加载光标与图标资源。然后紧接着调用SendMessage函数将缺省建立的图标与光标类型发送给窗口程

序处理。

		.if	eax == WM_CREATE
			invoke	LoadIcon,hInstance,ICON_HEAD
			mov	hIconHead,eax
			invoke	LoadIcon,hInstance,ICON_ARROW
			mov	hIconArrow,eax
			invoke	LoadCursor,hInstance,CUR_HAND
			mov	hCurHand,eax
			invoke	LoadCursorFromFile,addr szCursorFile
			mov	hCurDinosaur,eax
			invoke	SendMessage,hWnd,WM_COMMAND,IDM_ICOHEAD,NULL
			invoke	SendMessage,hWnd,WM_COMMAND,IDM_CURHAND,NULL

 

3、例子

.386
.model flat,stdcall
option casemap:none

include		windows.inc
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib

;下面的equ定义千万不要写成0x...
;菜单ID的定义
IDM_MAIN	equ	1000h
IDM_ICOHEAD	equ	2000h
IDM_ICOARROW	equ	2001h
IDM_CURDINOSAUR	equ	2002h
IDM_CURHAND	equ	2003h

;图标ID的定义
ICON_HEAD	equ	3000h
ICON_ARROW	equ	3001h

;静态光标文件的定义
CUR_HAND	equ	4000h

;句柄定义
.data?
hInstance	dd	?
hMenu		dd	?
hWinMain	dd	?
hCurDinosaur	dd	?
hCurHand	dd	?
hIconHead	dd	?
hIconArrow	dd	?

.const
szCursorFile	db	'Dinosaur.ani',0     ;存储于磁盘上的动态光标文件        
szClassName	db	'Icon and Cursor!',0

.code
_Quit		proc
		invoke	DestroyWindow,hWinMain
		invoke	PostQuitMessage,NULL
		ret
_Quit		endp

_WinMainProc	proc	uses ebx edi esi hWnd,uMsg,wParam,lParam
		mov	eax,uMsg

		.if	eax == WM_CREATE
			invoke	LoadIcon,hInstance,ICON_HEAD
			mov	hIconHead,eax
			invoke	LoadIcon,hInstance,ICON_ARROW
			mov	hIconArrow,eax
			invoke	LoadCursor,hInstance,CUR_HAND
			mov	hCurHand,eax
			invoke	LoadCursorFromFile,addr szCursorFile
			mov	hCurDinosaur,eax
			invoke	SendMessage,hWnd,WM_COMMAND,IDM_ICOHEAD,NULL
			invoke	SendMessage,hWnd,WM_COMMAND,IDM_CURHAND,NULL
		.elseif	eax == WM_COMMAND
			mov	eax,wParam
			movzx	eax,ax
			.if	eax == IDM_ICOHEAD
				;ICON_BIG是WM_SETICON中预定义的
				invoke	SendMessage,hWnd,WM_SETICON,ICON_BIG,hIconHead     
				invoke	CheckMenuRadioItem,hMenu,IDM_ICOHEAD,IDM_ICOARROW,\
					IDM_ICOHEAD,MF_BYCOMMAND
			.elseif	eax == IDM_ICOARROW
				;ICON_SMALL是WM_SETICON中预定义的
				invoke	SendMessage,hWnd,WM_SETICON,ICON_SMALL,hIconArrow    
				invoke	CheckMenuRadioItem,hMenu,IDM_ICOHEAD,IDM_ICOARROW,\
					IDM_ICOARROW,MF_BYCOMMAND
			.elseif	eax == IDM_CURDINOSAUR
				invoke	SetClassLong,hWnd,GCL_HCURSOR,hCurDinosaur
				invoke	CheckMenuRadioItem,hMenu,IDM_CURDINOSAUR,IDM_CURHAND,\
					IDM_CURDINOSAUR,MF_BYCOMMAND
			.elseif	eax == IDM_CURHAND
				invoke	SetClassLong,hWnd,GCL_HCURSOR,hCurHand
				invoke	CheckMenuRadioItem,hMenu,IDM_CURDINOSAUR,IDM_CURHAND,\
					IDM_CURHAND,MF_BYCOMMAND
			.endif
		.elseif	eax == WM_CLOSE
			invoke	_Quit
		.else
			invoke	DefWindowProc,hWnd,uMsg,wParam,lParam
			ret
		.endif

		mov	eax,0
		ret
_WinMainProc	endp

_WinMain	proc
		local	@stWndClass:WNDCLASSEX
		local	@stMsg:MSG

		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	LoadMenu,hInstance,IDM_MAIN
		mov	hMenu,eax

		invoke	RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
		push	hInstance
		pop	@stWndClass.hInstance
		mov	@stWndClass.cbSize,sizeof @stWndClass
		mov	@stWndClass.style,CS_HREDRAW or CS_VREDRAW
		mov	@stWndClass.lpfnWndProc,offset _WinMainProc
		mov	@stWndClass.hbrBackground,COLOR_WINDOW + 1
		mov	@stWndClass.lpszClassName,offset szClassName
		invoke	RegisterClassEx,addr @stWndClass

		invoke	CreateWindowEx,WS_EX_CLIENTEDGE,\
			offset szClassName,offset szClassName,\
			WS_OVERLAPPEDWINDOW,\
			200,200,300,200,\
			NULL,hMenu,hInstance,NULL
		mov	hWinMain,eax
		invoke	ShowWindow,hWinMain,SW_SHOWNORMAL
		invoke	UpdateWindow,hWinMain

		.while	TRUE
			invoke	GetMessage,addr @stMsg,NULL,0,0
			.break	.if	eax == 0
			invoke	TranslateMessage,addr @stMsg
			invoke	DispatchMessage,addr @stMsg
		.endw

		ret
_WinMain	endp

start:
		invoke	_WinMain
		invoke	ExitProcess,NULL
		
		end	start

三、代码中图标与光标文件下载

图标与光标文件

 

四、关于本篇博文的例子

程序运行起来后,选择菜单中的项目可以看到图标与光标的改变。

 

 

自制鼠标光标主题 灵感源自樱花庄的白猫的博客 下图是自己制作的主题的一些示范(参考仿照白猫的博客的光标样式) 以下是我采用的制作方法(不保证能长期使用,但是要自娱自乐没问题) 1. 工具 ①绘图软件(ps/sai 等等能够轻松绘制你想要的光标样式的软件) ②设定热点并生成 .cur或 .ani文件的软件(这里使用Axialis CursorWorkshop 官网下载的30天试用版,全英,官网有使用教程以及详细光标制... 阅读详情

相关推荐

AWiconsPro图标光标制作工具:专业设计与编辑

AWiconsPro是一款专业的图标光标制作工具,它具有丰富的功能,包括但不限于图标光标的创建、编辑、优化等。无论你是想要为你的软件设计一个独特的图标,还是需要为你的网页创建一个吸引眼球的光标,AWiconsPro都能满足你的需求。图标是一种小图形或图像,用于代表特定的对象或功能。光标则是在屏幕上指示当前鼠标位置的图形,它可以静态显示为箭头、沙漏等形状,也可以是动态的,比如旋转的沙漏表示程序正在处理某项任务。图标光标的目的是提供直观的视觉反馈,帮助用户了解如何与计算机系统进行交云。

weixin_36300623的博客 1011

Qt 获取管理员权限运行,更改图标,添加版本

Qt在开发 windows 10的时候,经常会因没有权限而不能对文件的读写造成程序各种不知到的bug,以管理员方式运行就不会出现这种问题,为了解决这个问题,故写了这个博客。随带把加载QT程序的图标和QT的版本也说一下。 1、新建一个后缀为.manifest的文件,此处我命名为demo.manifest,编辑打开,写入如下代码 <?xml version="1.0" encoding="UTF...

jbb123456789jbb的博客 1176

C语言学生信息管理系统---可以光标选择

C语言控制台环境下的学生信息管理系统。本程序主要设计重点在主菜单上面,具体的增删该查功能只提供函数,你可以按照具体业务去实现。菜单可以接收光标输入选择,非常具有人性化。在目前的框架下你可以自定义数据结构,再实现功能函数,很轻松的实现类似XX信息管理系统。此程序设计思想类似VC下的windows消息循环,另外还包含了函数指针的使用,相信对于新手而言可以学到不少东西.

Blender基础教程——第一期

Blender基础教程——第一期

常效榕 2403

ARKit面部动画实战:如何用blend shape让数字人表情更自然(附中文对照表)

本文深入探讨了如何利用ARKit的blend shape技术驱动数字人面部动画,以实现更自然生动的表情。文章提供了详细的blend shape中文对照表,并分享了实战技巧,包括构建复合表情动画序列、处理不对称性与微表情,以及性能优化策略,旨在帮助开发者高效提升数字人的表情表现力。

weixin_29292535的博客 327

安装升级最新版本postman时遇到“无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上.”的问题

软件版本迭代更新真快,最近升级最新Postman版本时出现以下问题 我就简单纪录下解决办法: 备注:我用的是最新的postman工具包:Postman-win64-7.25.0-Setup.exe,目前是最新 0. 前提是已经到postman官网https://www.postman.com/downloads/下载好软件工具包 1.安装window7系统更新补丁KB2533623,请到微软公司官网https://support.microsoft.com/en-us/help/2...

董广明的博客 1万+

QT牛刀小试(2)——如何更改程序的图标

1.   制作ICO图表文件 首先自己准备好喜欢的BMP位图文件,然后利用图标制作工具IconMaster将位图文件转化为ICO图标文件 2.   制作rc资源文件 用记事本新建个文件,里面就写一行:IDI_ICON1          ICON   DISCARDABLE

涣然冰释 3279

生成式引擎优化(GEO)- 搜索引擎优化

生成式引擎优化(GEO)是针对AI内容生成平台(如ChatGPT)的新型优化策略,旨在提升品牌内容在AI生成答案中的引用率,与传统SEO存在显著差异。GEO通过优化内容权威性、结构化和语义关联,适应AI的RAG技术架构,采用3C原则(可爬性、网络共识、反馈校正)提升内容可见性。其核心区别在于目标(引用率vs排名)、技术(语义优化vs关键词)及算法透明度(封闭vs开放)。适用场景包括商业决策、行业权威建设及公共知识服务,帮助品牌在AI时代占据信息主导权。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1405

layui-icon各种常用动态图标

buttonid="btnPrintDetail"class="layui-btnicon-btn">明细打印 icon很多,选择起来纷繁复杂,罗列一点常用的,用于自己以后使用~~AppleIOS苹果 。Android安卓 。上传-空心-拖拽 。消息-通知-喇叭 。添加-圆圈-细体 。

小熊猫 1万+

头歌OpenGauss数据库 - 单表查询 答案

本关任务:用SELECT语句检索数据表中指定字段的数据;用SELECT语句检索数据表中所有字段的数据。为了完成本关任务,你需要掌握: 1.如何获取数据表中指定字段的数据;2.如何获取数据表中的所有数据。

d214493517的博客 5721

如何利用air780e与stm32c8c6进行通信实现给手机发送一条英文短信的功能?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1238

Windows编程资源,菜单资源,图标资源,光标资源,上下文菜单,字符串资源,加速键资源

Windows资源是一种二进制数据,由链接器链接进程序成为程序的一部分,通过资源的方式可以很方便的对应用程序进行扩展。在Windows中资源可以是系统自定义的,也可以是用户自定义的。在本篇文章中为大家讲解菜单资源,上下文菜单,图标资源,光标资源,加速键资源的创建方法,这里我使用的编译器为virtual studio2022版本。

WdIg-2023的博客 1108

YOLOv13改进策略【多YAML融合】| HWD + DSC3k2_PConv + Detect_MBConv

本文记录的是利用HWD + DSC3k2_PConv + Detect_MBConv改进YOLOv13,分别涉及骨干、颈部和检测头部分的改进。一方面按照此配置,其工作量及创新程度能够满足论文发表的需求,另一方面是一些难以融合多个YAML的举例,以帮助大家理解如何将多个YAML整合到一个YAML中。小波下采样:一个简单但有效的语义分割下采样模块。块由两个主要块组成:无损特征编码块和特征表示学习块。HWD模块与其他下采样模块对比:保留信息能力:传统的下采样方法(如最大池化、平均池化和步幅卷积等)会导致信息丢失,

Limiiiing的博客 498

Win32设计图标、光标样式和窗口标题(简单易懂)

一、准备知识: 一、图标:(文件格式为 .ico) 图标有两种,分别是大图标(wc.hIcon)和小图标(wc.hIconSm)。 大图标:任务栏中程序图标 小图标:窗口上的图标 图标文件格式.ioc的转换: 1.可通过格式转换软件,比如格式工厂。 2.在线网站转换,在线版PDF转换器 二、光标:(静态光标文件格式.cur)、(动态光标文件格式 .ani) 就是在运行窗口上的光标。 光标文件.cur和.ani的获得: 1.使用Axialis CursorWorkshop软件可以自己制作,也可转换

程序员战胜 4765

基于jeecgboot3.9.0的项目管理——项目工作台(二)

基于jeecgboot3.9.0的项目管理——项目工作台(二)

宁波阿成的博客 206

ComfyUI整合包、秋叶ComfyUI、Florence节点报错下载并加载Florence2模型No module named ‘timm.layers‘、ComfyUI报错解决

步骤操作1打开2地址栏输入cmd并回车3输入命令:4安装完成后重新打开 ComfyUI,执行工作流,即可解决报错。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1245

QtGUI模块功能详细说明,图标和光标(七)

本文详细介绍了Qt GUI模块中图标和光标管理的相关内容,主要分为QIcon、QCursor和QIconEngine三个部分。QIcon部分涵盖了图标的创建、多分辨率支持、状态管理及其在Qt部件中的应用;QCursor部分介绍了预定义光标样式、自定义光标形状及其在部件和应用程序中的设置与管理;QIconEngine部分则深入探讨了自定义图标渲染引擎的实现,包括核心虚函数的重写、第三方库的集成以及与QIcon的关联使用。

u013230469的博客 1476

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Windows程序设计之图标光标菜单

添加资源文件方法:创建完工程和源文件后,执行菜单File->New->Files->Resource Script,输入文件名确定后,可看到在工程目录下生成两个文件:资源描述文件(.RC)和头文件(resource.h)一、图标1.绘制自定义图标(1)菜单Insert->Resource->Icon,单击"New"按钮,则在左侧Icon文件夹下产生ID为IDI_ICON1的图标,右击IDI_I

人生如棋 2029

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Win32菜单、图标、光标初学

  累并充实着!     今天学习了Win32的菜单、图标和光标。在64位WIN7上面运行VC6,插入资源时总是崩溃,所以在虚拟机中综合练习了一下。   1. 菜单与弹出菜单     2. 自定义的光标,有两种状态,在指定的区域(如标题栏、弹出菜单、框选区域)中切换光标样式。   3. 自定义图标,设置定时器消息,切换图标。在这个程序中,动态图标显得很乏味。不过我觉得动态设置窗口图标可以应...

weixin_30410999的博客 217

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Mac 菜单栏图标太多,怎么不遮挡图标

在 Mac 上打开的软件越多,右上角菜单栏上的图标是不是也越来越多,太多图标可能还会被左边的菜单挤掉,导致图标无法显示。 我们可以清理不需要的图标:按住command 键,将图标往下拖,图标就会「消失」,这时我们可以用 Bartender 来解决。 Bartender是一款很实用的 Mac 菜单栏图标管理工具,是简洁党和强迫症的神助。 让菜单栏秒变简洁 对于不常用的图标,可以用 Bartender 收纳起来。将光标移到菜单栏,图标就会自动显示,光标挪开,又会自动隐藏。 在 Bartender

macwbear的博客 1万+

windows程序设计(16):使用自己的图标,光标和字符串表

它们和菜单一起,统称为windows的资源,虽然它们也是数据,但他们并不存放在数据段中,我们也不能直接在程序中定义资源变量并访问它们,Windows提供函数直接或间接地把它们加载内存以备使用。 先说图标:图标分为2种:16*16的和32*32的,这两种的区别在于,16*16的用于程序的标题栏,而32*32的应用于程序中,或者用于exe文件。 光标其实没啥好说的,但是字符串表值得一提:windo

thefutureisour的专栏 1215

Win32汇编之使用资源--图标和光标

编写资源脚本----载入资源-----使用光标和图标 编写资源脚本类似于菜单和加速键脚本的编写,因此不再描述。 一、载入图标和光标     1、载入图标        invoke LoadIcon,hInstance,lpIconName        .if    eax               mov  hIcon,eax        .endif      hInst

程序之美 1252

HTML&CSS:手把手教你做汉堡菜单图标

这段代码是一个 HTML 页面,它包含了内联的 CSS 样式,用于创建一个汉堡菜单图标,这个图标可以通过复选框控制显示和隐藏。

weixin_52814911的博客 1275

MFC上下文菜单与定时器学习笔记

本博文简单介绍了上下文菜单以及定时器的知识内容,作为笔记发表在csdn上面。

执念斩长河 1015

如何使用 HTML 和 CSS 创建关闭菜单图标

最后,我们将添加 200 毫秒的过渡,以便悬停时的每次更改(我们稍后将设置)都是平滑的。关注我的博客,您将在其中获得提示、技巧和挑战,以保持您的技能敏锐。由于该元素应该是可单击的,并且应该在单击时关闭菜单,因此我们将光标设置为指针。最后,与第一行相同,我们将第三行的背景色设置为相同的红色并稍微旋转一下。现在,当“menu_icon”悬停时,我们将设置所有 3 行的样式。首先,我们将每条线的高度设置为 1 像素,并将背景颜色设置为黑色。我们将通过更改背景颜色将这条线的颜色设置为红色,然后稍微旋转它。

我的博客,不一样的自我表达 506

win32汇编--光标图标进阶之动态设置光标与图标

前边已经说过如何加载光标与图标,现在就再进一步说明一下如何动态设置光标与图标: 以下是核心代码(完整工程下载) .if eax==WM_CREATE invoke _CreatePopMenu mov hPopMenu,eax invoke LoadIcon,hInstance,IDI_ICO1 mov hIco1,eax invo...

weixin_30855761的博客 239
上一篇: 第八篇 TSR程序设计初探
下一篇: 补码消除减法运算
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值