我目前正在根据外部应用程序请求的参数列表动态创建Win32对话框。换句话说,用户必须提供一些文本/布尔响应,一旦单击确定就会立即响应。
因为EDIT和BUTTON控件的顺序和数量可能会有所不同,所以我需要一种方法来识别它们中的每一个。显而易见的解决方案 - 我有限的Win32知识 - 在创建对话框时使用 lpWindowName 参数作为标识符,然后迭代通过控件检查相同的参数以相应地处理输入数据。
但是,这会导致EDIT控件自动显示其窗口名称的问题,这会导致美学问题(我不希望标识符显示)。
有没有人能给我一些关于识别窗口控件的最正确方法的指示,而不向用户显示标识符?
非常感谢。
答案 0 :(得分:4)
Win32对话框控件不是通过名称标识,而是通过数字ID标识。使用CreateWindow/Ex()
创建控件时,可以使用hMenu
参数为其指定ID:
对于子窗口,hMenu指定子窗口标识符,该窗口标识符是对话框控件用于向其父级通知事件的整数值。应用程序确定子窗口标识符;对于具有相同父窗口的所有子窗口,它必须是唯一的。
如果您通过CreateDialogIndirect()
或CreateDialogParam()
使用对话框资源创建对话框窗口,则可以在控件定义中分配ID。
无论哪种方式,如果您想直接操作特定控件的HWND,或者使用GetDlgItem()
,GetDlgItemText()
等相关函数,您可以使用GetDlgItemInt()
获取特定控件的HWND(和它们相应的setter函数)。