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

时间:2014-01-25 19:01:10

标签: c++ windows winapi user-interface

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

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

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

有没有人能给我一些关于识别窗口控件的最正确方法的指示,而不向用户显示标识符?

非常感谢。

1 个答案:

答案 0 :(得分:4)

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

  

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

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

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