Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по VC++, сабж 
:(
    Опции темы
oleg1973
Дата 11.1.2004, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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)
пардон за может быть идиотский вопрос smile.gif))



--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
.RADIX
Дата 11.1.2004, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Судя по тому, что в первой присутствует CALLBACK , то она вовзращает значение, а вторая нет (у неё тип void).


--------------------
ASM Forever
PM MAIL   Вверх
setq
Дата 11.1.2004, 17:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











я собственно не такой уж и знаток, но CALLBACK - это такая функция, которую система вызывает как обработчик событий для окна. кроме объявления функции как CALLBACK, её надо зарегистрировать при создании оконного класса.

а LRESULT - это какой-то тип данных. смотри в windows.h
  Вверх
mr.DUDA
Дата 11.1.2004, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



__stdcall, и _cdecl - это модификаторы, определяющие порядок записи параметров функции в стек при вызове, и "роли" вызывающего/принимающего блоков (кто из них будет доставать данные из стека, и когда - после возврата из ф-ции, или до этого). Модификатор CALLBACK (это то же самое что FAR PASCAL, а PASCAL - это тоже самое что __stdcall) используется во всех WinAPI-шных функциях обратного вызова, т.е. там, где нужно вызвать функцию по указателю на неё.

LRESULT - это тип возвращаемого значения. Каждый обработчик WinAPI-шного сообщения возвращает значение именно этого типа (WndProc - это функция, вызываемая в цикле обработки сообщений окна, и содержащая кучу case-ов для выбора того или иного обработчика). LRESULT эквивалентен LONG, а тот - в свою очередь раскрывается как long.


--------------------
user posted image
PM MAIL WWW   Вверх
oleg1973
Дата 12.1.2004, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


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

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



ну про окно я в курсе
при использовании и 1 и 2 варианта функциональных различий не видно
как лучше/правильней/удобней ?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
RAN
Дата 12.1.2004, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

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



2-ой вариант не верен. Функция должна возвращать результат - код ошибки. Это используется Windows при обработке некоторых сообщений. Например, при инициализации диалога, система определяет по этому значении надо ли ей установить фокус на первый контрол или фокус уже установлен на нужный контрол ваших обработчиком.
Первый вариант однозначно правильнее, потому что такую функцию будет вызывать система. Не надо делать предположение, что CALLBACK - это stdcall, а HRESULT - long. Алиасы придуманы не просто так, и не только для удобства чтения кода. Тут главный выигрыш в совместимости. Возьмут и сделают в новой системе CALLBACK - cdecl, а HRESULT - __in64 и ваша программа работать не будет.
PM MAIL ICQ   Вверх
oleg1973
Дата 12.1.2004, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
Nastya
Дата 12.1.2004, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



Цитата
ну хорошо а если я сделаю так
int WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return (DefWindowProc(hWnd, message, wParam, lParam);
}

вот оно и будет возврашать



А разве при таком коде система не выдает предуприждение (warning)?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
oleg1973
Дата 12.1.2004, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
RAN
Дата 13.1.2004, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

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



ok то оно, ok.
Но тогда уж и HWND замени на void* (если я не ошибаюсь), UINT на unsigned, и т.д.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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