Когда читаю справку, всегда думаю, а что же значит это h в начале команд. Но только что порылся по MSDN и открыл для себя пару фактов:
1) h (в функциях hGet, hSet) значит handle (у каждого окна есть свой управляющий хендлер)
2) w (wParam) = word
3) l (lParam) = long
Пишут, что во времена 16-битной Винды параметры передавались через одно короткое 16-битное слово word и через длинное 32-битное long, а сейчас в Вин64 передаются и int64 в 64 бита соответственно (если кому интересно - здесь
оригинал). На сайте указывается также и
Message-структура для разных языков .NET:
[spoiler=HWnd, LParam, Msg, Result, WParam]
Имя Описание
HWnd Получает или задает дескриптор окна сообщения.
LParam Задает поле LParam сообщения.
Msg Получает или задает идентификатор сообщения.
Result Указывает значение, возвращаемое операционной системе Windows в ответ на обработку сообщения.
WParam Получает или задает поле WParam сообщения.
[/spoiler]
Также, если вы видели в справке кликера последнюю страницу (приложение с кодами клавиш), то возможно вам будет интересно посмотреть и более
полную версию 16-ричных кодов на сайте Мелкософта (в статье Virtual-Key Codes for Windows).
А вот что говорится в доке по ВинАПИ, про функцию отрисовки окон, в которой и задаются все эти ваши LParam да WParam:
[spoiler=WndProc]
Эта функция производит обработку сообщений для окна. Мы ее связываем с окном при заполнении структуры класса окна WNDCLASS в поле lpfnWndProc:
WNDCLASS WC;
......
WC.lpfnWndProc = WndProc;
Вот эта функция WndProc и будет получать сообщения, которые Windows будет отсылать окну. Соответственно эта функция должна быть объявлена ранее. Прототип у этой функции такой:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
Общий вид для реализации:
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
if (Message == WM_DESTROY )
{
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,Message,wparam,lparam);
}
В этой функции мы обрабатываем сообщения от Windows. При этом, если обработку не совершаем, то вызываем функцию по умолчанию DefWindowProc, которая умеет обрабатывать сообщения по умолчанию.
LRESULT DefWindowProc
(
HWND hWnd, // указатель окна
UINT Msg, // идентификатор сообщения
WPARAM wParam, // первый параметр сообщения
LPARAM lParam // второй параметр сообщения
);
Возврашает результат обработки сообщения. Обычно в функции WndProc организуется огромный switch для обработки сообщений.
[/spoiler]
И вот пример одной из
конкретных реализаций, так сказать каркас:
[spoiler]
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
[/spoiler]
Также на МСДН нашёл
страничку с перечнем разных типов оконных WM-сообщений, где говорится, что кроме WM, есть и другие виды сообщений:
[spoiler=Типы определяемых системой сообщений]
Prefix Message category Documentation
ABM and ABN Application desktop toolbar Shell Messages and Notifications
ACM and ACN Animation control Animation Control Messages and Animation Control Notifications
BCM, BCN, BM, and BN Button control Button Control Messages and Button Control Notifications
CB and CBN ComboBox control ComboBox Control Messages and ComboBox Control Notifications
CBEM and CBEN ComboBoxEx control ComboBoxEx Messages and ComboBoxEx Notifications
CCM General control Control Messages
CDM Common dialog box Common Dialog Box Messages
DFM Default context menu Shell Messages and Notifications
DL Drag list box Drag List Box Notifications
DM Default push button control Dialog Box Messages
DTM and DTN Date and time picker control Date and Time Picker Messages and Date and Time Picker Notifications
EM and EN Edit control Edit Control Messages, Edit Control Notifications, Rich Edit Messages, and Rich Edit Notifications
HDM and HDN Header control Header Control Messages and Header Control Notifications
HKM Hot key control Hot Key Control Messages
IPM and IPN IP address control IP Address Messages and IP Address Notifications
LB and LBN List box control List Box Messages and List Box Notifications
LM SysLink control SysLink Control Messages
LVM and LVN List view control List View Messages and List View Notifications
MCM and MCN Month calendar control Month Calendar Messages and Month Calendar Notifications
PBM Progress bar Progress Bar Messages
PGM and PGN Pager control Pager Control Messages and Pager Control Notifications
PSM and PSN Property sheet Property Sheet Messages and Property Sheet Notifications
RB and RBN Rebar control Rebar Control Messages and Rebar Control Notifications
SB and SBN Status bar window Status Bar Messages and Status Bar Notifications
SBM Scroll bar control Scroll Bar Messages
SMC Shell menu Shell Messages and Notifications
STM and STN Static control Static Control Messages and Static Control Notifications
TB and TBN Toolbar Toolbar Control Messages and Toolbar Control Notifications
TBM and TRBN Trackbar control Trackbar Control Messages and Trackbar Control Notifications
TCM and TCN Tab control Tab Control Messages and Tab Control Notifications
TDM and TDN Task dialog Task Dialog Messages and Task Dialog Notifications
TTM and TTN Tooltip control Tooltip Control Messages and Tooltip Control Notifications
TVM and TVN Tree-view control Tree View Messages and Tree View Notifications
UDM and UDN Up-down control Up-Down Messages and Up-Down Notifications
[/spoiler]
А вот какие существуют виды WM-сообщений общего назначения:
[spoiler]
Clipboard Messages
Clipboard Notifications
Common Dialog Box Notifications
Cursor Notifications
Data Copy Message
Desktop Window Manager Messages
Device Management Messages
Dialog Box Notifications
Dynamic Data Exchange Messages
Dynamic Data Exchange Notifications
Hook Notifications
Keyboard Accelerator Messages
Keyboard Accelerator Notifications
Keyboard Input Messages
Keyboard Input Notifications
Menu Notifications
Mouse Input Notifications
Multiple Document Interface Messages
Raw Input Notifications
Scroll Bar Notifications
Timer Notifications
Window Messages
Window Notifications
[/spoiler]
А вот как выглядит вызов функции SendMessage под cpp:
LRESULT WINAPI SendMessage(
_In_ HWND hWnd,
_In_ UINT Msg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
Взято
отсюда, также там есть пару ремарок про используемые параметры. А вот какой вид имеет функция отрисовки не для основного окна, а
для диалогового:
[spoiler]
BOOL CALLBACK DlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
default:
return FALSE;
}
}
[/spoiler]
Пока что не знаю, зачем точно это здесь и как именно это применить, но надеюсь, что здесь найдётся герой, изучащий всё это и ответящий нам на некоторые возникающие вопросы по месседжам.