Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сообщения от мыши под WinAPI

279
28 декабря 2004 года
bave
456 / / 07.03.2004
КАКАЯ константа сообщения движения мыши. (Возможно WM_MOUSEMOVE - но я не уверен и проверить
не могу т. к. всё равно не знаю как получить текущие координаты.)
И как получать координаты мыши из WPARAM wParam - если вообще от туда.
8.5K
28 декабря 2004 года
god3
24 / / 01.12.2004
Цитата:
Originally posted by bave
КАКАЯ константа сообщения движения мыши. (Возможно 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 - координаты мышки

279
29 декабря 2004 года
bave
456 / / 07.03.2004
Спасибо, вроде всё понятно. Тлько не
знаю 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);
}
8.8K
29 декабря 2004 года
Fluf
11 / / 29.12.2004
брррррррррррр

static int xPos;
static int yPos;

Напиши эти строки прям в функции обработки сообщений окна.
Глобальными они не будут, но и удаляться/заново обьявлятся при выходе/входе в функцию (метод) они не будут.
279
29 декабря 2004 года
bave
456 / / 07.03.2004
Да по моему в глобальных переменных, в данном случае нет ничего страшного, я например
и для обработки событий от клавиатуры тоже глобальные
переменные использую и нормально всё пашет.
Если бы это MFC был, тогда другое дело, тогда
бы функция обработки событий была бы методом,
какого-либо класса, а мне с методами классов
почему-то удобней работать чем с глобальными
функциями. Я вообще, на чистый WinAPI недавно
перешёл вот и запары всякие.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог