lParam и wParam

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Лена89
Сообщения: 51
Зарегистрирован: 20 июн 2007, 10:36

20 июн 2007, 11:59

Здравствуйте!

Учу Visual C++. Читала книги, но не могу толком понять для чего нужны в некоторых ф-ях lParam и wParam? В чем их суть и что вместо них вставляется (например, вместо int можно поставить целое чисо)? Может, кто объяснит попроще?
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

20 июн 2007, 13:05

Обычно функции SendMessage(), PostMessage() и др. используют данные параметры. Содержимое WPARAM и LPARAM зависят от каждого конкретного оконного сообщения. Смотри в MSDN информацию по оконным функциям и сообщениям.
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

20 июн 2007, 14:09

Читала книги, но не могу толком понять для чего нужны в некоторых ф-ях lParam и wParam?
Превед из 16-битной Win 3.11.
lParam - 32 - битовый парaметр (long в 16 битовой среде это 32 бита), wParam - word param, word это 16 бит. Сейчас понятия "WORD" и "DWORD" устарели.
Ныне оба типа - это 32 или 64 битовые целые в зависимости от ОС - Win32 или Win64.
Нести эти два параметра могут все что угодно: координаты мыши, код нажатой клавиши на клавиатуре, или указатель на интерфейс/функцию.
2B OR NOT(2B) = FF
Лена89
Сообщения: 51
Зарегистрирован: 20 июн 2007, 10:36

22 июн 2007, 11:45

Спасибо, вам!

А здесь, чем их можно заменить?

Код: Выделить всё

case WM_CTLCOLOR:{   
       if((HWND)lParam == hEdit) 
             SetTextColor((HDC)wParam, RGB(255 ,0 ,0));
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

22 июн 2007, 13:15

Не понял вопрос. Если сообщение - WM_CTLCOLOR, то действительно wParam - Это Handle to Display Context, а lParam - это HWND контрола. Что вам нужно заменить?
2B OR NOT(2B) = FF
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

22 июн 2007, 18:13

Хотя нет, вру.

MSDN:

Remarks
The WM_CTLCOLOR message has been replaced by more specific notifications in 32-bit versions of Windows. These replacements include the following:


WM_CTLCOLORBTN
WM_CTLCOLOREDIT
WM_CTLCOLORDLG
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC
2B OR NOT(2B) = FF
Лена89
Сообщения: 51
Зарегистрирован: 20 июн 2007, 10:36

24 июн 2007, 19:33

Нет, я имела ввиду вместо: (HWND)lParam, (HDC)wParam и hEdit.
Лена89
Сообщения: 51
Зарегистрирован: 20 июн 2007, 10:36

27 июн 2007, 16:17

Что примерно...вообще там может быть?
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

27 июн 2007, 16:39

Лена89 писал(а):Что примерно...вообще там может быть?
Все, что угодно. Зависит от конкретного Windows-сообщения:
WinMain писал(а):Обычно функции SendMessage(), PostMessage() и др. используют данные параметры. Содержимое WPARAM и LPARAM зависят от каждого конкретного оконного сообщения. Смотри в MSDN информацию по оконным функциям и сообщениям.
Absurd писал(а):Нести эти два параметра могут все что угодно: координаты мыши, код нажатой клавиши на клавиатуре, или указатель на интерфейс/функцию.
Обычно, в описании того или иного Windows-сообщения (иденцифицируемого константой вида WM_xxxxxxxx) указывается, используются ли для ДАННОГО сообщения wParam и lParam и какая информация (опять же - для ДАННОГО сообщения) в них находится.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

27 июн 2007, 16:44

Лена, ты издеваешься? Тебе же сказали, что значение этих параметров зависит от мессэйджа. Они не статичны!

Например для WM_SIZE wParam хранит тип ресайза, а lParam - новую ширину и высоту в младшем и, соответственно, старшем словах.

Для того же WM_PAINT - эти параметры не используются.

Какой смысл имеет wParam и lParam для конкретного сообщения можно прочесть в MDSN.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить