通过字符串获取对话框项的可能性

Posted

技术标签:

【中文标题】通过字符串获取对话框项的可能性【英文标题】:Possibility to get a Dialog Item via string 【发布时间】:2014-04-09 08:01:03 【问题描述】:

我必须在 MFC 应用程序中显示/启用一堆对话框项。它们都有类似IDC_EDIT_CHANNEL1_x 的名称,其中 x 是一个介于 0 到 15 之间的 int 值。资源文件中的 ID 没有排序,因此我想通过该字符串获取项目。

是否可以从字符串"IDC_EDIT_CHANNEL1_1" 中获取名为IDC_EDIT_CHANNEL1_1 的resourceId?

众所周知,GetDlgItem() 仅适用于 int 值。

【问题讨论】:

【参考方案1】:

您没有看到的问题是预处理器在编译时将IDC_EDIT_CHANNEL1_x 替换为整数。这是一个宏,不是字符串。

所以您的应用程序永远不会“看到”字符串。在源代码到达编译器之前,该字符串已被预处理器替换。

我的建议是使用连续的 ID。我不知道您为什么不想这样做,但这可能是解决您的问题的最快、最直接的方法。

另一种方法是根本不使用宏。资源编辑器可以使用字符串,如果预处理器不将它们替换为整数,那就会使用它。然后你可以按字符串过滤它们。

【讨论】:

您也可以创建一个数组并通过 DDX_Control 将其元素绑定到您的控件,然后通过索引访问,即使这不是最好的方法。

以上是关于通过字符串获取对话框项的可能性的主要内容,如果未能解决你的问题,请参考以下文章

在 POSTMAN 中,我如何获取响应标题项的子字符串?

powershell 获取与PowervRA匹配某个字符串的所有目录项的请求模板

如何获取注册表项的值,并且仅使用 powershell 获取值

c# 怎样获取string的某个字符最后一位的位置!

c 枚举 获得枚举项的字符串

使用 regex_search 获取所有匹配项的索引?