mfcgetdlgitem_mfc queue

mfcgetdlgitem_mfc queueGetDlgItem 根据一个对话窗或一个控件的ID,返回一个指向这个对话窗或控件的对象的指针

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

CWnd::GetDlgItem

CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;

Jetbrains全家桶1年46,售后保障稳定

返回值:

指向给定的控件或子窗口的指针。如果没有控件具有nID给出的整数ID,则返回NULL。

返回的指针可能是临时的,不能被保存以供将来使用。

参数:

nID 指定了要获取的控件或子窗口的标识符。
phWnd 指向子窗口的指针。

GetDlgItem:根据一个对话窗或一个控件的ID,返回一个指向这个对话窗或控件的对象的指针 

void CGetRadioDlg::OnButtonok() 
{
	// TODO: Add your control notification handler code here
	CString str;
	CButton* Radiobutton = (CButton*)GetDlgItem(IDC_RADIO1 + m_Radio - 1);
	Radiobutton->GetWindowText(str);
	MessageBox(str);
}

拓展:MFC项目的Resource.h文件中定义了各种资源ID,如下图单选按钮的定义

mfcgetdlgitem_mfc queue

疑问:

  • 宏定义:IDC_RADIO1对应1000
CWnd* GetDlgItem( int nID ) const;

GetDlgItem(IDC_RADIO1 + m_Radio - 1)

( IDC_RADIO1 + m_Radio – 1 )是一个int型数值,也就是说在函数调用的时候会将 IDC_RADIO1 转换为 1000

但是在MFC中通过拖动添加按钮后会出现宏定义不连续的现象,即:

IDC_RADIO    1000
IDC_RADIO1    1002

 是不是通过以下方式查找按钮会出现问题

void CGetRadioDlg::OnRadio1() {
	// TODO: Add your control notification handler code here
	m_Radio = 1;
}

void CGetRadioDlg::OnRadio2() {
	// TODO: Add your control notification handler code here
	m_Radio = 2;
}

void CGetRadioDlg::OnRadio3() {
	// TODO: Add your control notification handler code here
	m_Radio = 3;
}

void CGetRadioDlg::OnRadio4() {
	// TODO: Add your control notification handler code here
	m_Radio = 4;
}
GetDlgItem(IDC_RADIO1 + m_Radio - 1)

 还是程序重启后,会重新修改,待验证


如果想访问控件特有的功能,则可以尝试将GetDlgItem的返回值强制转换为控件所对应的类型 

CButton* Radiobutton = (CButton*)GetDlgItem(IDC_RADIO1 + m_Radio - 1);
Radiobutton->GetWindowText(str);

 不推荐用这种方法来访问控件的特有功能,因为MFC对这样的用法不太支持,有些情况下会产生严重错误,而有些情况下则不起任何作用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234117.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月11日 上午11:43
下一篇 2025年6月11日 下午12:15


相关推荐

  • MariaDb数据库管理系统学习(二)使用HeidiSQL数据库图形化界面管理工具

    MariaDb数据库管理系统学习(二)使用HeidiSQL数据库图形化界面管理工具

    2021年12月9日
    116
  • 常见的IT自动化运维工具有哪些?推荐一款好用的?「建议收藏」

    自动化运维是IT运维工作的升华,其不单纯是一个维护过程,更是一个管理的提升过程,是IT运维的最高层次,也是未来的发展趋势。所以作为IT运维人员,一定要知道常见的IT自动化运维工具有哪些?哪款比较好用?常见的IT自动化运维工具有哪些?1、Puppet2、SaltStack3、Ansible4、PSSH5、阿里云OOS6、行云管家【重点推荐】一款好用的自动化运维工具-行云管家!1、自动化运维之预设脚本库脚本是实现自动化运维的基础,运维人员经常通过脚本来替代以往一些需要手工操作的业务,提升工作

    2022年4月14日
    165
  • 想共享计算机却无法保存设置,win7打印机共享时出现无法保存打印机设置怎么解决…

    想共享计算机却无法保存设置,win7打印机共享时出现无法保存打印机设置怎么解决…办公电脑安装了 GHOST 版 WIN7 操作系统 在设置打印机共享时 报 错误 0x000006d9 无法设置打印机共享 今天小编给大家介绍下 win7 打印机共享时出现无法保存打印机设置怎么解决吧 win7 打印机共享时出现无法保存打印机设置解决方法一 1 点击打开 开始 控制面板 管理工具 在管理工具界面中找到并双击 组件服务 2 在弹出的 组件服务 中点击左侧窗口中的服务 在出现的右侧服务列表找

    2026年3月17日
    2
  • kworkers_work为什么名词

    kworkers_work为什么名词1.简介:    在spi驱动中用到了内核的线程,用的函数就是跟kthread_worker和kthread_work相关的函数,对于这两个名词的翻译,在网上暂时没有找到合适的,先翻译成线程内核线程相关的:工人和工作,这么直白的翻译是根据其工作原理相关的,本来想翻译成别的,一想到他的实现方式,直白的翻译,更能让人理解。    此部分介绍的函数主要在inc

    2026年3月9日
    7
  • vue报错:Navigation cancelled from “/userIndex“ to “/blank/login“ with a new navigati

    vue报错:Navigation cancelled from “/userIndex“ to “/blank/login“ with a new navigati最近在弄一个vue项目时碰到这么一个报错,查了下资料,记录一下:这个错误是vue-router的内部错误,是因为没有进行catch处理,导致的编程式导航跳转问题,往同一个地址跳转时,会报错。解决方法如下:在路由文件中进行配置:router/index.jsimportVuefrom’vue’importRouterfrom’vue-router’Vue.use(Router)//解决报错constoriginalPush=Router.prototype.pushco

    2022年7月26日
    30
  • ubuntu vi上下左右键无法使用?

    ubuntu vi上下左右键无法使用?

    2022年2月22日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号