如何在不显示文本的情况下分配 Win32 EDIT 控件的窗口名称?

Posted

技术标签:

【中文标题】如何在不显示文本的情况下分配 Win32 EDIT 控件的窗口名称?【英文标题】:How to assign window name of a Win32 EDIT control without displaying the text? 【发布时间】:2014-01-25 19:01:10 【问题描述】:

我目前正在根据外部应用程序请求的参数列表动态创建 Win32 对话框。换句话说,用户必须提供一些文本/布尔响应,这些响应会在单击“确定”后立即发送。

因为 EDIT 和 BUTTON 控件的顺序和数量可能会有所不同,所以我需要一种方法来识别它们中的每一个。显而易见的解决方案——就我有限的 Win32 知识而言——是在创建对话框时使用 lpWindowName 参数作为标识符,然后通过控件迭代检查相同的参数以相应地处理输入数据。 p>

但是,这会导致 EDIT 控件自动显示其窗口名称的问题,从而导致美观问题(我不希望显示标识符)。

谁能给我一些关于在不向用户显示标识符的情况下识别窗口控件的最正确方法的指示?

非常感谢。

【问题讨论】:

AFAIR 有一个属性可以用来配置默认显示文本。 如果您的 id 可以是数字,请滥用 CreateWindow 中的 HMENU 参数,最终将您的“id”(然后,高位字)“oring”一个真实的 ID(例如,低位字)跨度> @manuell:这不是滥用。对话框控件设计为由数字 ID 标识,并且使用 HMENU 参数是分配这些 ID 的方式。这在 CreateWindow/Ex() 文档中。 @RemyLebeau 我知道 :-) 某种意义上的“滥用”,例如,使用 ID 中的某些位来存储控制类型。 【参考方案1】:

Win32 对话框控件不是由名称标识,而是由数字 ID 标识。使用CreateWindow/Ex()创建控件时,可以使用hMenu参数为其分配ID:

对于子窗口,hMenu 指定子窗口标识符,一个整数值,对话框控件用于通知其父级事件。应用程序确定子窗口标识符;对于具有相同父窗口的所有子窗口,它必须是唯一的。

如果您通过CreateDialogIndirect()CreateDialogParam() 使用对话资源创建对话窗口,则在控件定义中分配ID。

无论哪种方式,如果你想直接操作它,你可以使用GetDlgItem()来获取特定控件的HWND,或者使用相关的函数,如GetDlgItemText()GetDlgItemInt()等(以及它们对应的setter函数) .

【讨论】:

以上是关于如何在不显示文本的情况下分配 Win32 EDIT 控件的窗口名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新启动的情况下调试 mod_perl2 模块?

VIM:如何在不使用非文本颜色元素的情况下更改 Showbreak Highlight 颜色

如何在不使用 UIWebView 的情况下在 iOS 10 中显示带有 HTML 标签的文本(使用 swift)

Win32编辑控件默认文本

如何在不使用 JavaScript 或 jQuery 的情况下将 div 的文本绑定到隐藏字段?

如何在不打开的情况下将数据发送到另一个活动