Программирование окон (C ++): Как проверить, занят ли идентификатор дочернего окна? а как сгенерировать уникальный идентификатор для дочернего окна? - PullRequest
0 голосов
/ 06 июня 2011

Как я могу проверить, занято ли указанное целое число? Я создаю себе шаблон, который будет использоваться специально для создания оконного элемента управления. Мне нужен какой-то способ отследить удостоверение личности ребенка. Например, пользователь шаблона случайно поставил создать параметр с таким же идентификатором, тогда он должен вернуть ошибку. Так как же проверить, повторяется ли ID ребенка?

Как лучше всего создать уникальный идентификатор для дочернего окна? или я просто #define их для определенной итерации целого числа, начиная с определенного числа? Будет ли это конфликтовать с окном, если, например, я создам другое независимое окно в приложении?

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Для чего бы это ни стоило, вы можете перечислить дескрипторы дочерних окон, используя EnumChildWindows():

http://msdn.microsoft.com/en-us/library/ms633494(v=VS.85).aspx

Затем есть функция для получения идентификатора дочернего окна из егодескриптор с именем GetDlgCtrlID():

http://msdn.microsoft.com/en-us/library/ms645478(v=vs.85).aspx

Это полезно только после создания окна из шаблона.Если вы хотите проверить шаблон перед созданием окна, то это будет зависеть от формата шаблона.

Используемые вами идентификаторы не будут конфликтовать между окнами, поскольку сообщения, которые указывают номера, будут отправляться разным"родители".Только пары (parent, id) должны быть уникальными.

0 голосов
/ 07 июня 2011

Я решил эту проблему, реализовав простой класс IDManager с предопределенным диапазоном идентификаторов и очередью для повторного использования свободных идентификаторов. Перебор всех дочерних окон кажется довольно тяжелым делом при создании каждого элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...