![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| BadPointer |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.9.2009 Репутация: нет Всего: нет |
Здравствуйте! Помогите разобраться с ошибкой- вызываю функциию CreateWindow, все параметры на мой взгляд верны, а она возвращает NULL. Функции главного окна организованны в класс:
PlayerClass.h
PlayerClass.cpp
WinMain.cpp
Stdafx.h
Это все файлы проекта. |
||||||||
|
|||||||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
процедура окна должна все таки возвращать осмысленное значение, а не ноль,
особенно в тех случаеях, когда ей нечего ответить:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Скорее всего, ты отшиб стандартный обработчик WM_CREATE. Сделай так, как показал
GremlinProg, т.е. вызывай DefWindowProc для необрабатываемых сообщений. -------------------- ... |
|||
|
||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да уж, проверенно обработчик окна всегда должен возвращать DefWindowProc. В твоем случае ошибка заключается в том, что у тебя в default: стоит обычный вызов этой функции, а не ее возврат.
Поэтому достаточно писать default: return DefWindowProc(...); а последний return отпадает т.к. default словит все, что не обрабатывается и до конца функции не дойдет. Это сообщение отредактировал(а) TGrey - 8.9.2009, 12:03 |
|||
|
||||
| GremlinProg |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
обработчик очень даже причем:
ни в коем разе, процедура окна - обязательная его составляющая
default тут ни при чем, смысл не в том, что он отловит все не обрабатываемые сообщения, а в том, что результат работы процедуры окна не должен быть нулевым Добавлено через 7 минут и 48 секунд
нет, не отпадает, все сообщения, которые не попадут в default должны также вернуть результат, TGrey, почитай чтоли литературу по си, прежде чем разбрасываться неуместными советами, а про switch с default у нас был отдельный разговор: почему его нежелательно использовать в процедуре окна, и к чему это может привести, полистай поиск -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||
|
|||||||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Для начала я только в конце заметил, что у него вызов функции DefWindowProc, а не возврат. Поэтому и написал, то что написал. Насчет без него я имел ввиду DefWindowProc, а не всего обработчика, тут я не спорю, думал, что можно и возвращать что-то иное.
И каким это боком последний ретурн может не отпасть если в switch стоит default?? Он вроде для того и сделан, чтобы ловить все, что не ловят caseы и тогда и так ясно, что если в него всунуть return DefWindowProc(...); то до последнего ретурна не дойдет очередь. Я то понял, что даже после обработанного сообщения нужно вернуть DefWindowProc, но я говорил конкретно про не обрабатываемые сообщения. И заметив ошибку я отредактировал вроде раньше, чем ты добавил замечания в мою сторону. Это сообщение отредактировал(а) TGrey - 8.9.2009, 12:47 |
|||
|
||||
| GremlinProg |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
это не имеет значения, даже если бы стоял return DefWindowProc, пришлось бы его дублировать после switch, т.к. case'ы не возвращают результат, даже компилятор тебе должен об этом напомнить
слово не воробей, к тому же, ты отредактировал пост опять же неверно, у меня складывается ощущение, что поиском пользуюсь только я: http://forum.vingrad.ru/forum/topic-260881...y1879209/0.html ведь тема не такая уж и старая, что стоит ввести в запрос "default"? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Так я не спорю, не увидел ошибку - написал не то что нужно.
Да про то что дублировать я ничего против и не имею. Как я уже сказал, что я все же думал, уже так не думаю И как уже говорил, в дефолте возврат сработает только если сообщение не обрабатывается. У меня в статьях по которым я учил это видимо тоже забыли этому уделить внимание и поэтому структура было такова
И все работает. |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ни чего не путаешь? быть может так:
или так:
если нет, то покажи статьи, где такое пропогандируют, т.к. предложенный тобою код не пройдет базовый курс Си, зато пройдет тест "как делать нельзя ни в коем случае" -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да в книге Финогенова вроде первый пример без макроса HANDLE_MSG и без ретурна после свича. Дальше вроде макрос используется. А так примеры из интернеты авторов нет как таковых. Функции просто вызываются, а не returnятся.
Блин ты мне открыл глаза! Просто я писал свои исходники без макроса и весь код писал либо в оконной процедуре либо вызывал функцию. Ужос. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
первый пример процедуры окна из книги Финогенова "Win32. Основы программирования":
тут return и не требуется, т.к. он стоит на всех путях свитча, вобщем, WinAPI это уже не касается, не надо раздувать оффтопик Это сообщение отредактировал(а) GremlinProg - 8.9.2009, 15:43 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| BadPointer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 7.9.2009 Репутация: нет Всего: нет |
Добавил return DefWindowProc в WndProc и WM_CREATE: все заработало! Кстати не первый раз на такие грабли наступал, а никогда не смотрел что возвращается по дефолту в WndProc. Всем спасибо!
|
|||
|
||||
| Titeha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.2.2010 Репутация: нет Всего: нет |
Здравствуйте, уважаемые!
У меня похожая проблема, только я не облекал в класс. Сделал как тут пишите, но CreateWindowEx все-равно возвращает 0, при этом проверка GetLastError возвращает 1407. Не подскажите что может быть?
В заголовочном файле я подключаю ресурсы и другие заголовочные файлы для нормальной компиляции "проекта". Создавал пустой проект Win32 волшебником студии, компилируется нормально, без сообщений и ошибок, а при выполнении - выход с ошибкой. Код, возвращаемый функцией GetLastError получил в отладчике. Пишу сюда, так как ответа не нашел, а новую тему создавать считаю лишнем, раз есть похожая. Спасибо. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
||||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
1407 - Не удается найти класс окна.
|
|||
|
||||
![]()
|
| Правила форума "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. |