В настоящее время я работаю над динамическим созданием диалога Win32 на основе списка параметров, запрашиваемых внешним приложением. Другими словами, пользователь должен предоставить некоторые текстовые/логические ответы, которые отправляются сразу после нажатия OK.
Поскольку порядок и количество элементов управления EDIT и BUTTON могут отличаться, мне нужен способ идентифицировать каждый из них. Очевидным решением для моих ограниченных знаний Win32 является использование параметра lpWindowName в качестве идентификатора при создании диалога и последующего повторения с помощью элементов управления, проверяющих этот же параметр, чтобы соответствующим образом обрабатывать входные данные.
Однако это приводит к тому, что элементы управления EDIT автоматически отображают имя своего окна, что вызывает эстетические проблемы (я не хочу, чтобы отображалось идентификатор).
Может ли кто-нибудь дать мне несколько указаний относительно наиболее подходящего способа идентификации оконных элементов управления, не отображая идентификатор пользователя?
Благодаря тонну.
Диалоговые элементы управления Win32 не идентифицируются по имени, а вместо него - числовым. Когда вы создаете элемент управления с помощью CreateWindow/Ex()
, вы можете использовать параметр hMenu
для назначения ему ID:
Для дочернего окна hMenu указывает идентификатор дочернего окна, целочисленное значение, используемое элементом управления диалоговым окном для уведомления родителя о событиях. Приложение определяет идентификатор дочернего окна; он должен быть уникальным для всех дочерних окон с одним и тем же родительским окном.
Если вы создаете диалоговое окно с использованием ресурса диалога через CreateDialogIndirect()
или CreateDialogParam()
, вы назначаете идентификаторы в определениях CreateDialogParam()
управления.
В любом случае, вы можете использовать GetDlgItem()
чтобы получить HWND определенного элемента управления, если вы хотите напрямую его манипулировать, или использовать связанные функции, такие как GetDlgItemText()
, GetDlgItemInt()
и т.д. (И соответствующие им функции GetDlgItemInt()
).