Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Создание композитных контролов |
Автор: Vyacheslav 27.5.2005, 16:01 | ||
Есть задача - создать композитный контрол, состоящий из набора других. Для примера(повторяю - только для примера) создаем контрол , содеожащие в себе три кнопки.
При создании возникли проблемы. 1) Где должен быть размещен вызвов Create для m_button, что бы все показывалось как при динамическом создании контрола, так и при вставке в ресурс CustomControl и указании для него соответсвующего имени класса? 2)Как перехватить сообщения от buttons внутри контрола? PS. Более 10 лет программирую на С++, но только сечас имел честь ознакомиться с MFC в силу производственной необходимости . И ... MFC - это все что угодно и возможно даже замечательная библиотека, но к ООП имеет весьма отдаленное отношение. |
Автор: srd 28.5.2005, 09:55 | ||||
Вызов Create() для m_button должен находиться в методе Create() родительского контрола CCompositeControl.
При создании дочернего контрола - кнопки указывайте в качестве родителя окно CCompositeControl. Все сообщения от кнопки шлются родителю. |
Автор: Vyacheslav 30.5.2005, 09:42 |
1) Create не вызывается при "нединамическом" создании контрола. Такой способ подойдет только если вручную вызывать CCompositeControl::Create. И это то я то как раз так и сделал. Но при этом кнопки не создаются и не соответсвенно не прорисовываются, если если CCompositeControl создавать не с помощью Create, а посредством вставки в ресусурс CustomControl 2) Я так и делал, но к сожалению ничего не проходит. Вернее не проходит ничего, что хотя бы отдаленно напоминало событие нажатия кнопки |
Автор: oper54 30.5.2005, 13:23 | ||
Может такой вариант подойдет - все тоже, только для вывода кнопок на экран использовать статик который и станет родителем кнопок.... Вроде такого
|
Автор: srd 3.6.2005, 13:31 | ||||
Прошу прощения, я имел в виду не метод Create(), а обработчик сообщения WM_CREATE.
Странно, кнопка всегда отсылает своему родительскому окну уведомление о нажатии BN_CLICKED. Прийду домой, попробую создать проект и посмотреть. |
Автор: Vyacheslav 3.6.2005, 13:34 | ||
Правильно. С этим я разобрался. Там была чисто моя ошибка. С WM_CREATE я проверю |
Автор: Гость_прохожий 3.6.2005, 14:06 | ||
Не заработает. Надо переопределить PreSubclassWindow |
Автор: Vyacheslav 3.6.2005, 14:18 |
И в PreSubclassWindow необходимые манипуляции по созданию кнопок выполнять ? |
Автор: Гость_прохожий 3.6.2005, 14:48 |
![]() |
Автор: srd 3.6.2005, 16:30 |
Дома дождаться получения WM_CREATE у меня не получилось. И понятно почему, сабклассируется то уже созданное окно. А PreSubclassWindow действительно вызывется после вызова SubclassDlgItem(). Муторное это дело, создание элемента управления на основе ресурса диалога, проще уж руками. Гость прохожий, почему не регистрируешься? Получил бы плюс к репутации ![]() |
Автор: Гость_прохожий 6.6.2005, 12:06 |
Пока я только прохожий, если решу более ли менее постоянно зависнуть, так зарегюсь ![]() |