| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Перехватить сообщения родителя |
| Автор: EvgenyTS 6.1.2010, 11:17 |
| Создал свой контрол на основе СEdit. В функции OnCreate(LPCREATESTRUCT lpCreateStruct); своего контрола выполняю доп. функции нужные мне. Проблема в том, что когда я это контрол размещаю на диалоге. При открытии диалога, программа не заходит в функцию OnCreate моего контрола. Здесь я создаю контрол просто размещая на диалоге-формочке контрол CEdit и в .h диалога создаю переменную контрола и т.д. Если создавать контрол на диалоге вручную... т.е. создать объект, потом вызвать ф-цию OnCreat. то все ок. |
| Автор: Earnest 8.1.2010, 11:34 |
| Контролы на диалоге из ресурса создаются внутри АПИ согласно шаблону. ДО того, как получит управление твой (и MFC) код. А WM_CREATE посылается именно при создании. Т.е. тогда, когда оконная функция еще не подменена. Если ты хочешь подставить эдит своего типа, то нужно использовать DDX_Control, а необходимые функции выполнить в функции PreSubclassWindow. В принципе, можно продублировать их и в OnCreate и в PresubclassWindow, чтобы твой конрол правильно создавался и динамически и из ресурса. Но есть тонкости: если ты собираешься создавать окно и динамически и из ресурсов, то нужно иметь в виду что при динамическом создании PreSubclass тоже вызывается, причем очень "неудачно" - так, что там нельзя создавить новые окна, иначе получишь море ругани. В общем, это тоже преодолимо, но если ты не создаешь окна в дополнительном коде или не собираешься поддерживать динамическок создание, то можно не морочить себе голову и просто вместо OnCreate сделать нужные вещи в PreSubclassWindow. |
| Автор: Earnest 11.1.2010, 12:01 | ||
| Тогда так: 1) Пишешь отдельную функцию, где создаешь свои доп. кнопки, например, InitButtons(). 2) Вызываешь ее из OnCreate (для динамического создания) 3) В PresubclassWindos пишешь такой код (чтобы работало и из ресурсов)
|
| Автор: EvgenyTS 11.1.2010, 12:35 |
| Спасибо огромное, помогло!!! |