Как сделать так что бы при выборе в лист боксе (к примеру) количества создаваемых объёктов ( кнопок, статиков или эдитов)
они создавались чуть пониже (например), т.е. програмно в процессе выполнения программы, потом если захотел поменял количество, т.е. как это сделать, какие массивы для хранения использовать, как инициализировать и т.д.
И ещё вопрос: при вызове метода Create для той же кнопки её идентификатор(который последний параметр в Create) нуно зарегистрировать в ресурсах, так вот как сделать это именно из внутренностей программы?
динамическое создание контролов
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Используем CreateWindow[Ex], где в качестве паарметра window class указываем уже зарегистрированные в Windows классы окон "BUTTON", "COMBOBOX", "EDIT", "LISTBOX", "MDICLIENT" и т.д. (см. ремарку к функции CreateWindow в MSDN). Хранить нужно в массиве те самые хэндлы, которые возвращает CreateWindow[Ex]. Зная их можно делать с окном всё, что угодно.
Если нужно установить у динамически созданного контрола resourse ID для дальнейшего message processing'а, используем SetDlgCtrlID. Новые ID в resoure.h запихивать не то, что не стоит, а просто НЕЛЬЗЯ (вообще не рекомендую править этот файл руками, если не понимаешь полностью механизма его создания и модификации редактором ресурсов). Новые ID должны быть просто целыми положительными числами, НИКАК не пересекающимися с уже существующими идентификаторами ресурсов. Для удобства можно сделать кучу define'ов и вынести их в отдельный файлик (например DynamicIDs.h).
Удаляем динамически созданные контролы с помощью Win32 API DestroyWindow.
Приём создания всех контролов статически (т.е. в редакторе ресурсов), а в ходе выполнения программы их простого показывания/скрывания от конечного пользователя (ShowWindow), по прежнему актуален.
Если нужно установить у динамически созданного контрола resourse ID для дальнейшего message processing'а, используем SetDlgCtrlID. Новые ID в resoure.h запихивать не то, что не стоит, а просто НЕЛЬЗЯ (вообще не рекомендую править этот файл руками, если не понимаешь полностью механизма его создания и модификации редактором ресурсов). Новые ID должны быть просто целыми положительными числами, НИКАК не пересекающимися с уже существующими идентификаторами ресурсов. Для удобства можно сделать кучу define'ов и вынести их в отдельный файлик (например DynamicIDs.h).
Удаляем динамически созданные контролы с помощью Win32 API DestroyWindow.
Приём создания всех контролов статически (т.е. в редакторе ресурсов), а в ходе выполнения программы их простого показывания/скрывания от конечного пользователя (ShowWindow), по прежнему актуален.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Спасибо большое Romeo. Вот глянул вроде андерстенд - всё вроде понял.