详细介绍GetDlgItem()

书籍:《Visual C++ 2017从入门到精通》的2.3.8 Win32控件编程

环境:visual studio 2022

内容:【例2.31】在模态对话框上可视化创建树形控件

说明:以下内容大部分来自腾讯元宝。

GetDlgItem() 是 Windows API 中用于获取对话框或父窗口中指定控件句柄的函数,其核心功能是通过控件标识符快速定位控件对象。以下是详细说明:


1. 函数功能

GetDlgItem() 的主要作用是检索对话框或父窗口中指定控件的句柄(HWND),从而允许程序对控件进行操作(如修改文本、调整属性等)。其功能不仅限于对话框,还可用于任何父子窗口关系中,只要子窗口具有唯一标识符。


2. 函数原型

HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
  • 参数
    • hDlg:父窗口或对话框的句柄。
    • nIDDlgItem:需检索控件的标识符(ID),通常在资源编辑器中预设。
  • 返回值
    • 成功时返回控件的句柄(HWND)。
    • 失败时返回 NULL,可通过 GetLastError() 获取错误信息。

3. 使用场景

​**(1) 对话框初始化**

在 OnInitDialog() 中获取控件句柄并保存,便于后续操作:

BOOL CMyDialog::OnInitDialog() {CDialogEx::OnInitDialog();m_hEdit = GetDlgItem(IDC_EDIT1); // 保存编辑框句柄return TRUE;
}
​**(2) 消息处理**

响应按钮点击等事件时,通过控件句柄修改界面:

void CMyDialog::OnBnClickedButton1() {CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);if (pEdit) {pEdit->SetWindowText(L"文本已修改");}
}
​**(3) 通用窗口操作**

适用于任何父子窗口结构,例如获取状态栏句柄:

HWND hStatusBar = GetDlgItem(hWndMain, IDC_STATUSBAR);

4. 注意事项

  1. 临时指针问题
    GetDlgItem() 返回的 CWnd* 指针可能是临时对象,不建议长期保存。若需保留控件指针,应通过 GetDlgItem() 重新获取或使用成员变量缓存。
  2. Unicode 兼容性
    在 Unicode 编译模式下,建议使用 GetDlgItemW() 并显式传递宽字符控件 ID(如 IDC_EDIT1 对应 L"IDC_EDIT1")。
  3. 嵌套对话框限制
    仅能获取直接子窗口的控件句柄,无法穿透嵌套对话框层级。

5. 扩展函数

Windows SDK 提供了多个基于 GetDlgItem() 的扩展函数,例如:

  • GetDlgItemInt():从编辑框控件获取整数值。
  • GetDlgItemText():获取控件的文本内容。

示例代码

// 获取按钮句柄并修改文本
HWND hButton = GetDlgItem(hWndDlg, IDOK);
if (hButton) {SetWindowText(hButton, L"确认提交");
}// 获取编辑框文本
wchar_t szText[256];
GetDlgItemText(hWndDlg, IDC_EDIT1, szText, 256);

通过合理使用 GetDlgItem(),可以高效地实现对话框控件的动态交互。如需进一步了解控件样式设置或消息处理机制,可参考 Windows SDK 文档中 Dialog Boxes 相关章节。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

⭐算法OJ⭐克隆图【BFS】(C++实现)Clone Graph

前情提要:图论入门【数据结构基础】:什么是图?如何表示图? 133. Clone Graph Given a reference of a node in a connected undirected graph. Return a deep copy (clone) of the graph. Each node in the graph contains a va…

SpringSecurity——基于角色权限控制和资源权限控制

目录 基于角色权限控制 1.1 自定义 UserDetailsService 1.2 加载用户角色 1.3. 给角色配置能访问的资源(使用切面拦截,使用注解) 总结 资源权限控制 2.2. 需要有一个用户;(从数据库查询用户) 2.2 基…

【MySQL】表的约束

目录 零、前言一、空属性二、默认值三、列描述四、zerofill五、主键六、自增长七、唯一键八、外键结尾 零、前言 表中一定要有各种约束,通过约束来让用户未来插入的数据是符合要求的。约束的本质就是通过计算反过来要求用户插入正确的数据。所以站在MySQL的角度上来…

SQLMesh系列教程:SQLMesh虚拟数据环境

各种工具都已将软件工程实践引入到数据工程中,但仍有差距存在,尤其是在测试和工作流等领域。SQLMesh 的目标是在这些领域开辟新的天地,解决像 dbt 这样的竞争产品尚未提供强大解决方案的难题。在这篇文章中,我将对 SQLMesh 进行简…

基于Babylon.js的Shader入门之五:让Shader支持法线贴图

如果一个比较平坦的物体表面要添加更多的凹凸细节,但是我们又不想通过建模实现,这时候法线贴图就派上用场了。法线贴图是通过与灯光的交互来让一个平坦表面造成凹凸效果假象的,在基于Babylon.js的Shader入门之四:让Shader支持基础…

活码在实际操作中的具体场景有哪些?怎么应用?

当传统二维码因“内容固定、无法追踪、流量拥堵”等问题逐渐失效时,活码正在成为企业破解运营痛点的关键工具。 无论是需要实时更新内容的线下物料,还是面临用户分流压力的线上客服,动态二维码都能通过“一码多用、灵活配置”的特性&#xf…

极空间NAS部署gitea教程

极空间NAS部署gitea步骤教程 背景1. 准备镜像1.1 极空间官方1.2 Win系统docker再上传1.3 镜像转录 2. MySql配置2.1 容器配置2.2 命令行配置 3. gitea配置3.1 容器配置3.2 打开网页3.3 网页配置安装 参考资料 背景 极空间Nas和别的Nas不同的地方就在于,他不是那种标…

Wireshark:在 显示过滤器中“加入条件”过滤后,出现其他类型的数据包,为什么?

一、 在Wireshark中使用“tcp协议”过滤后,仍出现TLSv1.2协议的数据包,原因如下: 1. ‌协议层次关系‌ ‌TCP是传输层协议‌,而‌TLS属于应用层协议‌,后者直接运行于TCP之上‌28。因此,所有TLS流量&…

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力 0. 论文简介0.1 基本信息0.2 摘要 1. 引言2. 材料与方法2.1 大语言模型的使用2.2 可读性标准2.3 统计分析 3. 结果3.1 Bezirci-Yılmaz可读性评分3.2 Ateşman可读性评分3.3 全面性评分3.4 准确性评分 4. 讨论4.1 可读…

设计模式(行为型)-策略模式

目录 定义 类图 角色 角色详解 Strategy(抽象策略类)​ Context(环境类 / 上下文类)​ ConcreteStrategy(具体策略类)​ 优缺点 优点​ 缺点​ 使用场景 类行为差异场景​ 动态算法选…

服装零售行业数字化时代的业务与IT转型规划P111(111页PPT)(文末有下载方式)

服装零售行业数字化时代的业务与IT转型规划P111 详细资料请看本解读文章的最后内容。 随着数字化技术的迅猛发展,服装零售行业正经历着前所未有的变革。本文将对《服装零售行业数字化时代的业务与IT转型规划P111》进行详细解读,探讨未来几年内该行业的…

【大语言模型_6】mindie启动模型错误整理

一、启动报 [hccl_runner.cpp:141] AllGatherHcclRunner:0 HcclCommInitRootInfo fa il, error:2, rank:0, rankSize:2 背景:运行DeepSeek-R1-Distill-Qwen-14B模型,在2张300 P卡可以运行,单独一张启动报以上错误。 问题分析&…

STM32F429单片机FMC接口驱动TFT LCD和SDRAM

1、FMC接口介绍 FMC 接口(即可变存储控制器)是一种用于管理外部存储器的外设接口,支持多种类型的存储器,主要分为三大类:NOR/SRAM/PSRAM设备(TFTLCD相当于SRAM)、NOR FLASH/NAND FLASH/PC卡设备…

ollama不安装到c盘,安装到其他盘

ollama 安装包默认安装到c盘,安装程序并没有提供选择文件夹安装功能,本来c盘就快满了,下几个模型c盘都快爆了,如何将ollma安装到其他盘呢? ollama 默认安装位置 C:\Users\Admin\.ollama 是 Ollama 用来放大模型的文件夹…

java项目之基于ssm的少儿编程在线培训系统(源码+文档)

项目简介 少儿编程在线培训系统实现了以下功能: 用户信息管理: 用户信息新增 用户信息修改 教师信息管理: 教师信息添加 教师信息删除 教师信息修改 课程信息管理: 课程信息添加 课程信息修改 课程信息删除 课程类型管理&…

Cinema4D安装及基本操作

一、简介 Cinema 4D(C4D)是德国 Maxon Computer 开发的 3D 软件,具备强大的建模、动画、材质、渲染功能,以易用高效著称,广泛应用于影视、游戏、设计等领域,是行业内主流 3D 创作工具。 二、安装 1.下载安…

为什么TCP需要三次握手?一次不行吗?

文章目录 1. 三次握手的过程2. 为什么需要三次握手?3. 握手过程中每一步的具体作用4. 简单比喻5. 为什么是三次握手,而不是两次或四次?6. 三次握手中的序列号有什么作用?7. 总结 1. 三次握手的过程 三次握手是建立 TCP 连接的过程…

大数据在人力资源管理中的洞察与决策

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型浪潮中,人力资源管理(HRM)正经历着前所未有的变革。…

让vscode远程开发也可以图形显示

目录 0. 摘要1. 保存查看2. jupyter内置inline渲染3. jupyter浏览器4. matplot修改后端5. SSH X11转发[※]6. 参考 0. 摘要 vscode登录远程服务器进行开发遇到图形显示需求时,该怎么处理?一般有几种方式: 保存下来查看jupyter内置的inline图…

Blender制作次表面材质

效果: 主要用沃罗诺伊纹理做出云絮感 然后EV开启次表面设置