![]() |
|
![]() ![]() ![]() |
|
torero |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 177 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
У меня проект документ - вид и в окне "вид" мне бы хотелось вставить ещё одно окно, чтобы оно
получало сообщения от мыши, клавиатуры и меню. В теории написано, что дочерние окна фокус не получают, значит это, видимо, должно быть перекрывающееся окно. Создал новый класс CWndOk : public CWnd ................................... CWnd *pWnd = new CWnd; Теперь нужно написать оператор pWnd->Create(...pParentWnd,ID); но вот в чём проблема. Когда я раньше делал дочерние окна в Фрейме или в "виде", то вставлял Create в метод OnCreate, к которому обращается каркас приложения. Вот я и здесь добавил при помощи ClassWizarda разные методы: OnCreate, OnNCCreate,PreCreateWindow, поставил в них операторы TRACE() и оказалось, что каркас приложения вызывает только конструктор и всё. В конструкторе я поставил AfxRegisterWndClass , а где поставить оператор Create(); И ещё в Create есть параметр pParentWnd, должен он быть NULL, или ещё что-то? |
|||
|
||||
FantomaS19 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 28.7.2007 Репутация: нет Всего: нет |
после конструктора вид вызывает OnInitialUpdate() , его и переопределить надо
В частности там можно использовать GetDocument(), а в конструкторе нельзя |
|||
|
||||
torero |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 177 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
FantomaS19, правильно ли ты меня понял?
У меня для нового окна создан новый класс CWndOk производный от класса CWnd. Это не"вид" и не CView и в нём нет OnInitialUpdate. Хотя можно создать в "виде" объект CWndOk wok; и вызвать метод нового класса, например wok.Create(...); Но что-то мне кажется так не надо делать. Класс должен сам создавать окно. Возможно я ошибаюсь, уточни, пожалуйста. |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
В таком случае OnCreate() должно работать. Но маленький момент - а вы уверены, что вашему родительскому окну посылается WM_CREATE ? Оно точно где-то создается? Показали бы код... -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
torero |
|
||||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 177 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
CWndOk.cpp
Насчёт того что, посылается ли WM_CREATE родительскому окну- не знаю. Как и где это проверить? |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Кто-нибудь должен вызвать CWndOk::Create, само оно не вызовется. Кто и где это должен делать - зависит от логики приложения. Конструктор создает всего лишь оболочку.
-------------------- ... |
|||
|
||||
torero |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 177 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
Что CWndOk::Create не вызывается само, я понимаю. Но, получается, что не вызывается вообще ни
один метод. Значит я его вызову из "вида", но что мне взять в качестве родительского окна? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Естественно: нет окна - нет обработки. Сначала нужно его создать. Насчет родителя - нужно исходить из типа окна. Если окно дочернее, то указывай то окно, в котором оно расположено. А если плавающее - указывай главное окно приложения. -------------------- ... |
|||
|
||||
torero |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 177 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
Cпасибо, понял.
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |