MFC/C++学习系列之简单记录7

news/2024/12/28 18:50:37/

MFC/C++学习系列之简单记录7

  • 前言
  • 句柄的介绍
  • 句柄的使用
  • AFX开头的函数都是干什么用的?
  • 总结


前言

在MFC的使用中发现了句柄,今天来详细学习一下MFC中如何使用句柄吧!


句柄的介绍

句柄的使用是资源管理和传递的关键机制,通过句柄将系统资源或对象进行传递使用。

句柄的使用

  • 窗口句柄(HWND):用于唯一标识窗口的整数值,窗口句柄可以通过CWnd变量获取。
  • 设备上下文句柄(HDC):用于引用绘图设备上下文。设备上下文句柄可以通过CDC获取。
  • 菜单句柄(HMENU):用于唯一标识菜单对象。
  • 画笔句柄(HPEN):用于引用画笔对象
  • 画刷句柄(HBRUSH):用于引用画刷对象
  • 图标句柄(HICON):用于引用图标资源。
  • 光标句柄(HCURSOR):用于引用光标资源。
  • 位图句柄(HBITMAP):用于引用位图资源
  • 字体句柄(HFONT):用于引用字体资源
    除了以上句柄,还有一种通用的句柄叫HANDLE,是一个通用的指针类型,用于引用多种不同的系统对象。
// 窗口类
CreateWindow(xx);     //设备上下文句柄
HDC hdc = GetDC(hwnd); // 获取窗口的设备上下文句柄//菜单句柄
HMENU hMenu = CreateMenu(); // 创建一个菜单//画笔句柄
HPEN hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); // 创建画笔//画刷句柄
HBRUSH hBrush = CreateSolidBrush(RGB(255, 0, 0)); // 创建画刷//图标句柄
HICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(1)); // 加载程序中的图标资源//光标句柄
HCURSOR hCursor = LoadCursor(NULL, IDC_HAND); // 加载系统手形光标//位图句柄
HBITMAP hBitmap = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(2)); // 加载程序中的位图资源//字体句柄(HFONT):
HFONT hFont = CreateFont(20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, //通用句柄(HANDLE):
HANDLE hFile = CreateFile("C:\\example.txt", // 文件名GENERIC_READ,     // 访问模式0,                // 共享模式NULL,             // 安全属性OPEN_EXISTING,    // 创建模式FILE_ATTRIBUTE_NORMAL, // 文件属性NULL);            // 模板文件句柄
// 使用hFile进行文件操作
CloseHandle(hFile); // 关闭文件句柄

AFX开头的函数都是干什么用的?

在MFC中常看到一些以“AFX”开头的函数,是MFC框架提供的全局函数或者宏。这些函数和宏封装了Win32 API,使得C++开发者能够更加方便地编写Windows应用程序。
常用的有一下几个:

  • AfxWinInit():用于初始化MFC应用程序。
  • AfxGetApp():返回指向当前应用程序对象(CWinApp派生对象)的指针。
  • AfxGetMainWnd():返回指向程序主窗口的指针。
  • AfxGetInstance():返回程序的实例句柄。
  • AfxRegisterClass():注册窗口类。
  • AfxMessageBox():类似于Win32 API中的MessageBox函数,用于显示消息框。
  • AfxOuputDebugString():将字符串输出到调试装置。
  • AfxBeginThread():开始一个新的线程。
  • AfxEndThread():结束一个线程。
    最后两个长见于串口的开始结束。
    这里以AfxMessageBox()举例:
int result = AfxMessageBox(_T("程序开始运行?"), MB_OK);
// 根据返回值执行不同的操作
if (result != IDOK)
{// 用户点击了确定按钮return FALSE;
}

我把上述代码放到BOOL CMFCtest1Dlg::OnInitDialog()函数中,界面初始化的时候,就会弹窗提示。
在这里插入图片描述


总结

简单学习了一下句柄和AFX开头的函数的使用!


http://www.ppmy.cn/news/1558056.html

相关文章

KTP112 系列高性能、低功耗、数字温度传感器

KTP112是一款高精度、低功耗、可替代NTC / PTC 热敏电阻的数字温度传感器,可用于通信、计算机、 消费类电子、环境、工业和仪器仪表应用中的温度 测量。 KTP112在-40C至125C的正常工作范围 内,可提供 0.5C的温度精度,并具有良好的温度 线…

JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中

本文为Oracle数据库JSON学习系列的第一篇,讲述如何将JSON文档存储到数据库中,包括了版本为19c和23ai的情形。 19c中的JSON 先来看一下数据库版本为19c时的情形。 创建表colortab,其中color列的长度设为4000。若color的长度需要设为32767&a…

HDFS与HBase有什么关系?

1 、 HDFS 文件存储系统和 HBase 分布式数据库 HDFS 是 Hadoop 分布式文件系统。 HBase 的数据通常存储在 HDFS 上。 HDFS 为 HBase 提供了高可靠性的底层存储支持。 Hbase 是 Hadoop database ,即 Hadoop 数据库。它是一个适合于非结构化数据存储的数据库, HBase 基于列的…

golang 熔断限流降级

限流 - 2k 但是我的服务能力只有1k,所以这个时候多出来的流量怎么办: 1. 拒绝 2. 排队等待。用户体验不太好: 当前访问用户过多,请稍后重试和你的服务直接挂了 用户体验降级了 - 原本是访问流畅,下单流畅 -> 当前访…

基于微信小程序的在线教育平台设计与实现

标题:基于微信小程序的在线教育平台设计与实现 内容:1.摘要 本文介绍了基于微信小程序的在线教育平台的设计与实现。首先,阐述了在线教育的背景和发展趋势,指出了微信小程序在教育领域的应用前景。其次,详细描述了平台的设计思路和实现方法&…

专业的内外网数据交换方案 可解决安全、效率、便捷3大问题

内外网数据交换是很多企业和行业都会面临的场景,既然隔离了内外网,重中之重就是要确保数据的安全性,其次在数据流转交换过程中,不能太繁琐复杂,需要让用户快速、便捷的进行数据交换。首先我们来看看,在进行…

蓝桥杯物联网开发板硬件组成

第一节 开发板简介 物联网设计与开发竞赛实训平台由蓝桥杯大赛技术支持单位北京四梯科技有限公司设计和生产,该产品可用于参加蓝桥杯物联网设计与开发赛道的竞赛实训或院校相关课程的 实践教学环节。 开发板基于STM32WLE5无线微控制器设计,芯片提供了25…

【AI绘画】无限制生成任意IP角色,完全免费!最新文生图-Ideogram AI,比Flux还牛!

家人们!今天分享我近期玩得最多的一款AI,出图效果特强,主要不受任何限制!玩起来极为有趣的最新AI文生图工具——Ideogram AI 2.0 不仅做出来的作品人像效果逼真,而且连生成文字图都接近完美,操作傻瓜式&am…