Сообщения от мыши под WinAPI
не могу т. к. всё равно не знаю как получить текущие координаты.)
И как получать координаты мыши из WPARAM wParam - если вообще от туда.
Цитата:
Originally posted by bave
КАКАЯ константа сообщения движения мыши. (Возможно WM_MOUSEMOVE - но я не уверен и проверить
не могу т. к. всё равно не знаю как получить текущие координаты.)
И как получать координаты мыши из WPARAM wParam - если вообще от туда.
КАКАЯ константа сообщения движения мыши. (Возможно WM_MOUSEMOVE - но я не уверен и проверить
не могу т. к. всё равно не знаю как получить текущие координаты.)
И как получать координаты мыши из WPARAM wParam - если вообще от туда.
Да, за это отвечает сообщение WM_MOUSEMOVE.
Если пишешь на чистом API, то следует обрабатывать так:
WM_MOUSEMOVE
WPARAM wParam;
LPARAM lParam;
wParam указывает какая комбинация клавиш нажата (Ctrl, Alt и т.д.). Вот определения:
MK_CONTROL
MK_LBUTTON
MK_MBUTTON
MK_RBUTTON
MK_SHIFT
нажато может быть сразу несколько клавиш (их код получается через ИЛИ).
lParam как раз и содержит координаты мышки:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
Если пишешь на MFC, то там немного проще. Вешаем обработку события WM_MOUSEMOVE, далее работаешь в функции OnMouseMove.
Определение выглядит так:
afx_msg void OnMouseMove(
UINT nFlags,
CPoint point
);
nFlags - аналог wParam
CPoint - координаты мышки
знаю xPos и yPos - их каким типом лучше описать,
когда я под MFC писал, я тип int использовал,
примерно вот так:
int MouseX;
CPoint loc;
MouseX = loc.x;
Теперь надо под WinAPI, ну если я правильно
понял, то это будет примерно так выглядеть:
//Глобальные переменые для храния x,y;
int xPos;
int yPos;
//Далее какой либо код программы
.....
//Перехват сообщений:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{
case WM_MOUSEMOVE:
{
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
return 0;
}
//Какие - либо другие сообщения
.......
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
static int xPos;
static int yPos;
Напиши эти строки прям в функции обработки сообщений окна.
Глобальными они не будут, но и удаляться/заново обьявлятся при выходе/входе в функцию (метод) они не будут.
и для обработки событий от клавиатуры тоже глобальные
переменные использую и нормально всё пашет.
Если бы это MFC был, тогда другое дело, тогда
бы функция обработки событий была бы методом,
какого-либо класса, а мне с методами классов
почему-то удобней работать чем с глобальными
функциями. Я вообще, на чистый WinAPI недавно
перешёл вот и запары всякие.