![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
во первых, не указана процедура окна, не надо так радикально расставлять NULL'ы ), я же писал только о CreateDialog без _m_WndClass.lpfnWndProc класс-потомок просто не будет зарегистрирован во вторых, непонятно, какое имя у этого класса, предполагаю "", судя по тому, как _m_sClassName инициализируется в конструкторе ну и в третьих, т.к. я не вижу твоего шаблона, для суперклассинга диалога требуется четкое соответствие свойства CLASS в шаблоне диалога и имени класса _m_sClassName, т.е., судя по всему, у тебя эти значения должны быть равны и не должны быть пустыми в моем примере, имя класса "Мой диалоговый класс", а оконная процедура для диалога - WndProc -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alca |
|
||||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
А данная структура должна быть членом класса или не обязательно?
Добавлено @ 20:52
исправил:
Инициализировано:
Добавлено @ 20:54
Добавлено @ 20:59
Самое интересное, что в эту функцию s_BaseWndProc я не попадаю на брейкпоинты, т,е, ваще сюда "не заходиться" Это сообщение отредактировал(а) Alca - 30.7.2009, 21:00 |
||||||||||||||
|
|||||||||||||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а свойство CLASS в шаблоне диалога?
Добавлено через 2 минуты и 28 секунд нет, не обязательно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alca |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Исправил:
Добавлено @ 22:48
Добавлено через 14 минут и 36 секунд Какое сообщение ловить WM_INITDIALOG или WM_NCCREATE?
Это сообщение отредактировал(а) Alca - 30.7.2009, 22:50 |
||||||||
|
|||||||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Раньше (до исправлений) у меня сообщения заходили в метку WM_INITDIALOG, а теперь в WM_NCCREATE.
Кажись что-то продвигается. |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
да, теперь работает процедура окна, тут все сообщения будут приходить
там параметра-то нет, используй CreateDialogIndirectParam, и в последний параметр передай this вообще, это нужно ловить на WM_INITDIALOG, тогда этот параметр придет в lParam если после WM_NCCREATE сразу приходит WM_DESTROY, значит некорректно обрабатываешь WM_NCCREATE, посмотри s_BaseWndProc, она должна передавать сообщение дальше, по цепочке:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Alca, чтобы особенно не заморачиваться, я предлагаю тебе сделать так:
объясняю: lpInitObject - это статический указатель, который будет хранить объект окна в момент создания окна InitWndProc - это первичная процедура окна, задача которой - принять любое первое сообщение от окна, инициализировать GWL_USERDATA и переставить процедуру окна на BaseProc BaseProc - вторичная процедура окна, эта процедура независимо от стилей окна всегда имеет доступ к корректному GWL_USERDATA, поэтому она просто извлекает этот объект и передает управление его методу WndProc WndProc - это уже не статический метод, в ее обязанности входит управление цепочкой оконных классов, она вызывает CallWindowProc, switch я поставил просто для примера, если тебе надо в этом классе перехватывать какие-нибудь сообщения, а вообще, это можно делать уже в потомках CreateFromResource - делает то же самое, что и у тебя, за исключением того, что перед вызовом CreateDialog устанавливает lpInitObject теперь, от класса XWindow наследуй свои классы, можешь перекрывать метод WndProc в потомках и делать что хошь Добавлено через 3 минуты и 28 секунд делать что хошь с диалоговым окном в парадигме ООП -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |