![]() |
|
|
![]()
|
|
| EvgenyTS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 26.11.2008 Репутация: нет Всего: нет |
Создал свой контрол на основе СEdit. В функции OnCreate(LPCREATESTRUCT lpCreateStruct); своего контрола выполняю доп. функции нужные мне.
Проблема в том, что когда я это контрол размещаю на диалоге. При открытии диалога, программа не заходит в функцию OnCreate моего контрола. Здесь я создаю контрол просто размещая на диалоге-формочке контрол CEdit и в .h диалога создаю переменную контрола и т.д. Если создавать контрол на диалоге вручную... т.е. создать объект, потом вызвать ф-цию OnCreat. то все ок. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Контролы на диалоге из ресурса создаются внутри АПИ согласно шаблону. ДО того, как получит управление твой (и MFC) код. А WM_CREATE посылается именно при создании. Т.е. тогда, когда оконная функция еще не подменена. Если ты хочешь подставить эдит своего типа, то нужно использовать DDX_Control, а необходимые функции выполнить в функции PreSubclassWindow.
В принципе, можно продублировать их и в OnCreate и в PresubclassWindow, чтобы твой конрол правильно создавался и динамически и из ресурса. Но есть тонкости: если ты собираешься создавать окно и динамически и из ресурсов, то нужно иметь в виду что при динамическом создании PreSubclass тоже вызывается, причем очень "неудачно" - так, что там нельзя создавить новые окна, иначе получишь море ругани. В общем, это тоже преодолимо, но если ты не создаешь окна в дополнительном коде или не собираешься поддерживать динамическок создание, то можно не морочить себе голову и просто вместо OnCreate сделать нужные вещи в PreSubclassWindow. -------------------- ... |
|||
|
||||
| EvgenyTS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 26.11.2008 Репутация: нет Всего: нет |
Я как раз собираюсь создавать дополнительные 2 окна(кнопки) прямо на моем эдите. Так вот получается что программа заходит и в PreSubclassWindow сначала, а потом в OnCreat. Нужно чтоб можно было создавать и динамически, и из ресурсов, т.е. всеми возможными способами. Как тут быть? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Тогда так:
1) Пишешь отдельную функцию, где создаешь свои доп. кнопки, например, InitButtons(). 2) Вызываешь ее из OnCreate (для динамического создания) 3) В PresubclassWindos пишешь такой код (чтобы работало и из ресурсов)
-------------------- ... |
|||
|
||||
| EvgenyTS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 26.11.2008 Репутация: нет Всего: нет |
Спасибо огромное, помогло!!!
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |