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

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

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.kler.cn/a/448117.html

相关文章:

  • 冯诺依曼架构与哈佛架构的对比与应用
  • 简洁IIC协议讲述
  • 网络安全的攻防战争
  • libmodbus安装使用
  • HTTP—03
  • Flask内存马学习
  • 前端优化之图片
  • 一区牛顿-拉夫逊算法+分解+深度学习!VMD-NRBO-Transformer-GRU多变量时间序列光伏功率预测
  • hive架构简述
  • Android Retrofit2OkHttp3添加统一的请求头Header
  • 基于前端技术UniApp和后端技术Node.js的电影购票系统
  • 基于LabVIEW的USRP信道测量开发
  • Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
  • 数智化医院分布式计算框架融合人工智能方向初步实现与能力转换浅析
  • 数位dp-acwing(数字游戏)
  • 基于单片机的步进电机控制系统的设计研究
  • 数据结构 (队列略版)
  • TCP常见问题
  • 如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
  • [极客大挑战 2019]HardSQL 1
  • 豆包MarsCode:小T的密码变换规则
  • RLDP(快速链路检测)防环
  • Rust vs C: PNG解码器性能之争的启示
  • Apple Vision Pro 开发教程:通过 TestFlight 把开发的程序安装到其他的设备上测试
  • C++算法第十二天
  • 一起学Git【番外篇:如何在Git中新建文件】