![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
чем отличается
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) от void WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) пардон за может быть идиотский вопрос -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| .RADIX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 19.11.2003 Репутация: нет Всего: 0 |
Судя по тому, что в первой присутствует CALLBACK , то она вовзращает значение, а вторая нет (у неё тип void).
-------------------- ASM Forever |
|||
|
||||
| setq |
|
|||
|
Unregistered |
я собственно не такой уж и знаток, но CALLBACK - это такая функция, которую система вызывает как обработчик событий для окна. кроме объявления функции как CALLBACK, её надо зарегистрировать при создании оконного класса.
а LRESULT - это какой-то тип данных. смотри в windows.h |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
__stdcall, и _cdecl - это модификаторы, определяющие порядок записи параметров функции в стек при вызове, и "роли" вызывающего/принимающего блоков (кто из них будет доставать данные из стека, и когда - после возврата из ф-ции, или до этого). Модификатор CALLBACK (это то же самое что FAR PASCAL, а PASCAL - это тоже самое что __stdcall) используется во всех WinAPI-шных функциях обратного вызова, т.е. там, где нужно вызвать функцию по указателю на неё.
LRESULT - это тип возвращаемого значения. Каждый обработчик WinAPI-шного сообщения возвращает значение именно этого типа (WndProc - это функция, вызываемая в цикле обработки сообщений окна, и содержащая кучу case-ов для выбора того или иного обработчика). LRESULT эквивалентен LONG, а тот - в свою очередь раскрывается как long. -------------------- ![]() |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
ну про окно я в курсе
при использовании и 1 и 2 варианта функциональных различий не видно как лучше/правильней/удобней ? -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
2-ой вариант не верен. Функция должна возвращать результат - код ошибки. Это используется Windows при обработке некоторых сообщений. Например, при инициализации диалога, система определяет по этому значении надо ли ей установить фокус на первый контрол или фокус уже установлен на нужный контрол ваших обработчиком.
Первый вариант однозначно правильнее, потому что такую функцию будет вызывать система. Не надо делать предположение, что CALLBACK - это stdcall, а HRESULT - long. Алиасы придуманы не просто так, и не только для удобства чтения кода. Тут главный выигрыш в совместимости. Возьмут и сделают в новой системе CALLBACK - cdecl, а HRESULT - __in64 и ваша программа работать не будет. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
ну хорошо а если я сделаю так
int WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return (DefWindowProc(hWnd, message, wParam, lParam); } вот оно и будет возврашать -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
А разве при таком коде система не выдает предуприждение (warning)? -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
ниче не пишет все окей
Compiling... test.cpp Linking... assa.exe - 0 error(s), 0 warning(s) -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
ok то оно, ok.
Но тогда уж и HWND замени на void* (если я не ошибаюсь), UINT на unsigned, и т.д. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |