Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехватить сообщения родителя, Не создается контрол 
:(
    Опции темы
EvgenyTS
Дата 6.1.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



 Создал свой контрол на основе СEdit. В функции OnCreate(LPCREATESTRUCT lpCreateStruct); своего контрола выполняю доп. функции нужные мне.
 Проблема в том, что когда я это контрол размещаю на диалоге. При открытии диалога, программа не заходит в функцию OnCreate моего контрола. Здесь я создаю контрол просто размещая на диалоге-формочке контрол CEdit и в .h диалога создаю переменную контрола и т.д.
 Если создавать контрол на диалоге вручную... т.е. создать объект, потом вызвать ф-цию OnCreat. то все ок.
 
PM MAIL   Вверх
Earnest
Дата 8.1.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Контролы на диалоге из ресурса создаются внутри АПИ согласно шаблону. ДО того, как получит управление твой (и MFC) код. А WM_CREATE посылается именно при создании. Т.е. тогда, когда оконная функция еще не подменена. Если ты хочешь подставить эдит своего типа, то нужно использовать DDX_Control, а необходимые функции выполнить в функции PreSubclassWindow. 
В принципе, можно продублировать их и в OnCreate и в PresubclassWindow, чтобы твой конрол правильно создавался и динамически и из ресурса. 
Но есть тонкости: если ты собираешься создавать окно и динамически и из ресурсов, то нужно иметь в виду что при динамическом создании PreSubclass тоже вызывается, причем очень "неудачно" - так, что там нельзя создавить новые окна, иначе получишь море ругани. В общем, это тоже преодолимо, но если ты не создаешь окна в дополнительном коде или не собираешься поддерживать динамическок создание, то можно не морочить себе голову и просто вместо OnCreate сделать нужные вещи в PreSubclassWindow.


--------------------
...
PM   Вверх
EvgenyTS
Дата 11.1.2010, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Цитата(Earnest @  8.1.2010,  11:34 Найти цитируемый пост)
но если ты не создаешь окна в дополнительном коде или не собираешься поддерживать динамическок создание, то можно не морочить себе голову и просто вместо OnCreate сделать нужные вещи в PreSubclassWindow. 

 
 Я как раз собираюсь создавать дополнительные 2 окна(кнопки) прямо на моем эдите. Так вот получается что программа заходит и в PreSubclassWindow сначала, а потом в OnCreat.
 Нужно чтоб можно было создавать и динамически, и из ресурсов, т.е. всеми возможными способами. Как тут быть?
 
PM MAIL   Вверх
Earnest
Дата 11.1.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Тогда так:
1) Пишешь отдельную функцию, где создаешь свои доп. кнопки, например, InitButtons().
2) Вызываешь ее из OnCreate (для динамического создания)
3) В PresubclassWindos пишешь такой код (чтобы работало и из ресурсов)
Код

void CMyCoolWnd::PreSubclassWindow()
{
   base_class::PreSubclassWindow();

   // при динамическом создании тоже вызывается PreSubclass - из хука WH_CBT;
   // в этом случае создание доп. окон пропускаем (низзя создавать новые окна внутри хука) - подождем OnCreate
   _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
   if (pThreadState->m_pWndInit == 0)
      InitButtons();
}




--------------------
...
PM   Вверх
EvgenyTS
Дата 11.1.2010, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 26.11.2008

Репутация: нет
Всего: нет



Спасибо огромное, помогло!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.