当前位置: 首页 > news >正文

第3章,[标签 Win32] :窗口类06,实例句柄与图标光标

专栏导航

上一篇:第3章,[标签 Win32] :认识句柄

回到目录

下一篇:无

本节前言

对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏之前的文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。

我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。

学习本节所讲的知识,需要你事先了解过本章的完整代码。完整的代码,请参考下述文章链接。

参考课节:第3章,[标签 Win32] :本章程序代码

在之前,我们有讲过窗口类的基本情况。

为了便于学习,我们还是再次贴出窗口类的各个成员变量,如下所示。

typedef struct {UINT      style;WNDPROC   lpfnWndProc;int       cbClsExtra;int       cbWndExtra;HINSTANCE hInstance;HICON     hIcon;HCURSOR   hCursor;HBRUSH    hbrBackground;LPCTSTR   lpszMenuName;LPCTSTR   lpszClassName;
} WNDCLASS, * PWNDCLASS;

本节,我们的任务,是要在窗口类中,设置 hInstance,hIcon,和 hCursor 字段。

我们开始。

一.    hInstance 字段

hInstance 字段,它是实例句柄的意思。实例,是指应用程序的实例。

我们可以多启动几个记事本程序,如图所示。

图1

图1 中,我启动了三个记事本程序,每一个记事本程序,其实都是记事本程序的一个实例。每一个记事本程序的实例,都对应着桌面上的一个记事本程序窗口。

在之前的课节中,我讲了一点关于句柄的知识。

实例句柄,就是对应用程序实例的一种引用。

本节呢,我们需要给窗口中的 hInstance 字段设置一个值。这个值,我们将其设置为 WinMain 函数里面,参数列表中的第 1 个参数,hInstance 。

WinMain 函数中的 hInstance 参数如下图所示。

图2

设置代码,如下图所示。

图3

关于应用程序的实例句柄,我们在之前有讲解过,请大家参考下述文章链接,来学习。

参考课节:第1章 :第一个 WIn32 程序,程序入口

在上述文章链接的八.(一)分节中,有讲到实例句柄的问题。

二.    hIcon 字段

hIcon 字段,是图标句柄。

图标,是一个小图片,一个位图格式的小图片。

我们在下面的截图中,来看一看图标的示例。

图4

图4 里面,我在红色框线位置处展示了三个桌面图标。它们分别是回收站图标,unity 游戏引擎软件图标,搜狗高速浏览器图标。这三个呢,都是应用程序的桌面图标。

图标呢,不但是可以显示在桌面上,供我们启动程序,还可以在我们启动了程序以后,显示在桌面底部的任务栏上。我们来看一看。

图5

在图5 里面,我展示了我的电脑在此时写作时候的情况,红色框线位置,分别是搜狗高速浏览器的任务栏图标和 Visual Studio 2019 的任务栏图标。

图标呢,除了可以显示在桌面和任务栏之外,一般地,当我启动了一个软件以后,它也会显示在应用程序的左上角。比如下面我展示的 Visual Studio 2019 软件左上角的图标。

图6

看到了没? VS2019 左上角的那个图标,和任务栏的 VS2019 的图标一样。

一个程序的图标,一般的呢,就显示在三个位置上,分别是桌面,任务栏和程序的左上角。

图标的一个作用,就是向用户表示该程序。

当程序在运行时,图标会显示在任务栏上和程序窗口的标题栏左侧。

在本专栏的后面,我们会讲解,如何来创建一个自定义图标。

而现在呢,我们不想对图标的知识详细讲解,只想了解一下图标字段。所以呢,在本章代码中,我们采用的图标,是一个系统预定义的图标。

为了获取图标的句柄,我们需要调用函数 LoadIcon 。

LoadIcon 函数的声明代码如下。

此时,如果想要获取的图标句柄,它是系统预定义图标的句柄,那么,我们需要将 LoadIcon 函数的第一个参数设定为 NULL 。如果想要获取的图标句柄,它是程序员自定义的图标,并且是从保存在磁盘中的应用程序的可执行文件中加载这个图标时,那么,我们就必须要将第一个参数设置为 WinMain 函数的第一个参数,hInstance 。

由于本章程序代码采用了系统预定义图标,所以呢,第一个参数,我们用的是 NULL 。

LoadIcon 函数的第二个参数用于标识该图标。对于预定义图标来说,该参数是一个前缀为 IDI 的标识符。前缀 IDI 表示“图标的标识符”(ID for an icon),这些标识符都在 WinUser.h 头文件中定义。

我们来看一看本章程序代码对 hIcon 字段的设置代码。

图7

在本专栏里面,以及在佩措尔德先生的教材里面,很多的程序,采用的图标,都是 IDI_APPLICATION 标识符所引用的图标,与图7 中的设置情况一样。这个小图标,基本上是一个练习程序的时候,所使用的一种图标。我们来看一看这个图标。

图8

如图8 所示,它就长这样。

实际的程序,流行的商业程序里,基本上不会使用这样的图标。但是呢,如果你自己编写一个程序,为了省事的话,用这个图标,倒是也行。

LoadIcon 函数,返回图标的句柄。句柄的实际取值,我们并不关心,我们只是用它来设定窗口类变量 wndclass 的 hIcon 字段。

三.    hCursor 字段

讲完了 hIcon 字段以后,我们来讲解 hCursor 字段。

hCursor 字段,表示鼠标光标句柄。

鼠标光标,就是鼠标的指针。在不同的情况下,我们知道,鼠标的指针会显示为不同的形状。

鼠标指针的形状,是可以通过应用程序来进行设置的。

我们来看一看本章程序代码中对鼠标光标进行设置的部分。

图9

这个代码,其实与设置图标的代码差不多。换了个函数名,换了第二个参数。

加载图标的时候,采用的标识符,是以 IDI 为前缀的标识符。而在加载鼠标光标的时候,它是以 IDC 为前缀的大写字母标识符。

本章程序代码中的 LoadCursor 函数,为程序加载了一个系统预定义的鼠标指针(IDC_ARROW),并返回指针的句柄,这个句柄被用来设置窗口类变量 wndclass 的 hCursor 字段。当鼠标指针出现在这类窗口的客户区时,将呈现为一个小箭头的形状。

这个小箭头的形状,其实就是我们经常见到的鼠标指针的形状。

结束语

本节的内容不难,我们讲了窗口类的三个字段,实例句柄字段,图标字段,光标字段。

窗口类的字段,其实我们也快要讲完了。

大家学习愉快啊。

本节结束。

专栏导航

上一篇:第3章,[标签 Win32] :认识句柄

回到目录

下一篇:无

http://www.dtcms.com/a/511287.html

相关文章:

  • 带你了解STM32:PWR电源控制
  • React Hooks完全指南
  • 多线程之ThreadLocal
  • 如何修改root密码
  • (三)React技术核心思想——组件化编程
  • 国外唯美flash个人网站欣赏建设网银
  • 【NVIDIA-H200-3】3节点all-reduce-三节点扩展的性能边界:NVIDIA H200 24 卡集群 all-reduce 通信效率深度剖析
  • D026 vue3+django 论文知识图谱推荐可视化系统 | vue3+vite前端|neo4j 图数据库
  • 桃浦做网站常德经开区网站官网
  • ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
  • ArcGIS JSAPI 学习教程 - 要素图层(FeatureLayer)分类、分组设置可视化样式(ClassBreaksRenderer)
  • 10天!前端用coze,后端用Trae IDE+Claude Code从0开始构建到平台上线
  • [JavaEE初阶] 传输层协议---UDP 相关笔记
  • 考研408《操作系统》复习笔记,第二章《2.3 进程调度》
  • 网站开发流程有哪几个阶段网站关键词多少个合适
  • GitHub 热榜项目 - 日榜(2025-10-21)
  • 如何提高中药饮片批发业务的市场竞争力?
  • 门户网站建设关键点网站开发编程入门学习
  • 多路由隔离:构建模块化Agent工具服务器
  • [云计算] Classic Network-->VPC: 用SDN和Overlay实现隔离
  • linux shell编程实战 04 条件判断与流程控制
  • 10.21云计算作业
  • 服务器数据恢复—EqualLogic存储硬硬盘坏道,数据恢复有妙招
  • 风险识别不充分会让项目付出什么代价
  • LeetCode 46. 全排列
  • 洛谷 - P13982 数列分块入门 7(线段树解法 - 超详细版)
  • 页面PDF文件格式预览(不使用pdf.js)
  • Prompt Engineering 关键技能:精准掌控 LLM 输出的格式、内容与风格
  • 苹果(IOS)制作开发和发布证书
  • iOS 上架技术支持全流程解析,从签名配置到使用 开心上架 的实战经验分享