//Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT messg,
WPARAM wParam, LPARAM lParam) Почему параметры функции не имеют значений, а только типы - HWND UINT
WPARAM LPARAM и имена - hWnd messg wParam lParam?
Другие языки программирования и технологии
Оконное приложение на WinAPI, вопрос про параметры функции WndProc. Язык программирования Си.
Потому что это заголовок функции, а не ее вызов. Когда твоему приложению придет сообщение, эта функция будет вызвана системой для его обработки.
Эмм... Значения в эту функцию передаются, а функция "должна" их обработать. Как и в любую другую функцию. В т. ч. и на языке C. Или Вы взялись за WinAPI не особо разбираясь в C? Тогда у меня плохая новость - без основ это будет проблематично. Ну и большинство примеров в MSDN по поводу WinAPI - C/C++.
Если интересуют параметры:
hWnd дескриптор окна
messg сообщение
wParam и lParam параметры сообщения (lParam часто указатель на что-либо или не используется)
Сама функция отвечает за обработку сообщений к окну.
Если интересуют параметры:
hWnd дескриптор окна
messg сообщение
wParam и lParam параметры сообщения (lParam часто указатель на что-либо или не используется)
Сама функция отвечает за обработку сообщений к окну.
Это интерфейс в старом олд-скульном стиле. Винда сама вызывает WndProc, скидывая туда все события в виде сообщений. И внутри функции обычно располагается ОГРОМНЫЙ такой оператор switch килобайт на 30-40. Где, в качестве case как раз фигурируют все эти сообщения. Так весь интерфейс раньше и строился. Кстати, перехватывая эти сообщения, можно было замутить любую херню: например, порно-баннеры, вымогатели и т. п.
Ну это callback функция (то есть вызывается не явно).
Если конкретно разбирать программу на винапи то...
В скажем так инициализации приложения есть вот такие (или похожие) строки:
while(GetMessage(&msg,0,0,0)!=0) // цикл получения сообщений окна
{
TranslateMessage(&msg); // тут точно не знаю что происходит
DispatchMessage(&msg); // а вот именно тут операционная система и вызывает нашу callback функцию заполняя именно те самые параметры.
}
смысл не в том что бы разбираться в этих параметрах, а в том что для каждого сообщения (messg) свой набор параметров, которые всегда можно посмотреть в интернете.
Например если у вас messg равно WM_MOUSEMOVE то для этого сообщения
wParam будет указывать находятся ли в нажатом состоянии различные виртуальные клавиши. Этот параметр может состоять из одного или нескольких ниже перечисленных значений.
MK_CONTROLКлавиша CTRL находится в нажатом состоянии.
MK_LBUTTONЛевая кнопка мыши находится в нажатом состоянии.
MK_MBUTTONСредняя кнопка мыши находится в нажатом состоянии.
MK_RBUTTONПравая кнопка мыши находится в нажатом состоянии.
MK_SHIFTКлавиша SHIFT находится в нажатом состоянии.
MK_XBUTTON1Windows 2000/XP: Первая X-кнопка находится в нажатом состоянии.
MK_XBUTTON2Windows 2000/XP: Вторая X-кнопка находится в нажатом состоянии.
А lParam будет выставлено так, что:
Младшее слово устанавливает x-координату курсора. Координата - относительно левого верхнего угла рабочей области.
Старшее слово устанавливает y-координату курсора. Координата - относительно левого верхнего угла рабочей области.
одна из ссылок на запрос в поисковике "winapi WM_MOUSEMOVE"
http://www.vsokovikov.narod.ru/New_MSDN_API/Mouse_input/notify_wm_mousemove.htm
Если конкретно разбирать программу на винапи то...
В скажем так инициализации приложения есть вот такие (или похожие) строки:
while(GetMessage(&msg,0,0,0)!=0) // цикл получения сообщений окна
{
TranslateMessage(&msg); // тут точно не знаю что происходит
DispatchMessage(&msg); // а вот именно тут операционная система и вызывает нашу callback функцию заполняя именно те самые параметры.
}
смысл не в том что бы разбираться в этих параметрах, а в том что для каждого сообщения (messg) свой набор параметров, которые всегда можно посмотреть в интернете.
Например если у вас messg равно WM_MOUSEMOVE то для этого сообщения
wParam будет указывать находятся ли в нажатом состоянии различные виртуальные клавиши. Этот параметр может состоять из одного или нескольких ниже перечисленных значений.
MK_CONTROLКлавиша CTRL находится в нажатом состоянии.
MK_LBUTTONЛевая кнопка мыши находится в нажатом состоянии.
MK_MBUTTONСредняя кнопка мыши находится в нажатом состоянии.
MK_RBUTTONПравая кнопка мыши находится в нажатом состоянии.
MK_SHIFTКлавиша SHIFT находится в нажатом состоянии.
MK_XBUTTON1Windows 2000/XP: Первая X-кнопка находится в нажатом состоянии.
MK_XBUTTON2Windows 2000/XP: Вторая X-кнопка находится в нажатом состоянии.
А lParam будет выставлено так, что:
Младшее слово устанавливает x-координату курсора. Координата - относительно левого верхнего угла рабочей области.
Старшее слово устанавливает y-координату курсора. Координата - относительно левого верхнего угла рабочей области.
одна из ссылок на запрос в поисковике "winapi WM_MOUSEMOVE"
http://www.vsokovikov.narod.ru/New_MSDN_API/Mouse_input/notify_wm_mousemove.htm
Похожие вопросы
- Язык программирования Си
- Как на языке программирования си сделать, чтобы при вводе полного бреда программа не поломалась?
- Как в языке программирования СИ осуществлять вызов подпрограммы, которая находится в другом файле?
- Функции в языке программирования C.
- Ребята, скажите где можно скачать язык программирования Си, без ++
- Помогите пожалуйста решить задачу по программированию (язык программирования СИ)
- Вопрос программистам со стажем. Какой язык программирования учить начинающему программисту?
- Помогите пожалуйста найти ошибку в задаче (Язык программирования Си)
- Как на языке программирования Си убрать конкретный напечатанный элемент массива или напечатать его в определенном месте?
- Кто знает язык программирования Си++? Можно ли вывести текст по другому?
Значит всё дело в том, что это заголовок функции, это так?