>Malaja.
Ну начнем с того что простой перебор займет меньше времени чем перерисовка окна. Причем намного меньше.
Во-вторых: а зачем делать простой перебор. Кэшируй накопленную информацию в отсортированном списке. То есть - первый раз с запуском окна - простой перебор. При добавлении, удалении контролов - удаляй из контейнера идентификаторов номер контрола.
Во-вторых. Самый лучший способ (если это возможно) - определить все контролы который вообще могут быть на окне с самого начала. Это не всегда возможно но все же. С этими контролами работа идет по принципу - ShowWindow, MoveWindow. Надеюсь понятно =).
Если это не возможно - то существует следующий метод! Создаются и рисуются контролы которые расположены только на видимом пространстве. Вряд ли у тебя юзер наблюдает сразу 500 контролов. Наверняка наблюдает не больше 10-20-ти. =) Ну вот 10-20 контролов и создай - и просто динамически перегружай с ними работу.
В обоих случаях эффективность работы возрастает сильно. Правда придется хорошо поразбираться с работой контролов. И скорее всего - создать свои - перегруженные.
Еще можно плясать от получения, и потери фокуса элементом. В случае когда элемент не имеет фокуса - его можно просто нарисовать на канве =))) Ибо он занимается только одним - показом информации юзверю.
В случае получения фокуса - придется элемент создавать. Самый сложный способ - потому что требует хорошей работы GUI-мастера.
Пример такого способа -
https://club.shelek.ru/viewart.php?id=161.... Там есть контрол IEPropertyList, который в принципе должен постоянно обладать неизвестным количеством контролов, а реально всегда обладает только одним на котором в данный момент фокус.