Лабораторні роботи WinApi

Лабораторна робота №5

Лабораторна робота №5 "Миша"

Програма обробки повідомлень від миші.
Підрахунок відстані та швидкості руху миші.

Завдання:

1. Вивести координати миші у вікні.
2. Знайти відстань між двома точками у вікні.
3. Знайти швидкість руху миші на проміжку.

Для виконання цієї лабораторної роботи, необхідно вивчити теоретичний матеріал.

1.       Виведення координат миші у вікні.

Для того щоб визначити координати миші, необхідно обробити повідомлення WM_MOUSEMOVE, яке приходить кожний раз, коли виконується рух миші при активному вікні, в камках вікна. Параметрами цього повідомлення є координати миші.

Обробляючи це повідомлення, ви формуєте текстовий рядок наприклад наступним чином:

X = LOWORD(lParam);
Y = HIWORD(lParam);
wsprintf(str, “ X = %d    Y = %d “, x,y );

2. Відстань між двома точками у вікні.

Необхідно зафіксувати дві точки. Нехай це будуть точки в яких користувач натисне ліву а потім праву кнопку миші.

Коли виконується натискання лівої або правої кнопки миші, ми отримуємо повідомлення:

WM_LBUTTONDOWN або WM_RBUTTONDOWN

Разом з цими повідомленнями передаються координати миші.

X = LOWORD(lParam);
Y = HIWORD(lParam);

Це координати в яких було виконане натискання.

Нехай ліва кнопка миші була натиснута в координатах (X1,Y1) а права в координатах (X2,Y2). Відстань між двома точками можна отримати за виразом:

S = sqrt( ( X2 - X1 ) * ( X2 - X1 ) + ( Y2 - Y1 ) * ( Y2 - Y1 ) );

Для визначення швидкості руху миші нам потрібно знати час руху на промішку.

Для визначення часу, потрібно зафіксувати час при натисканні лівої кнопки миші, а потім час при натисканні правої кнопки миші.

T1 = clock(); // цей рядок пишемо в обробник повідомлення WM_LBUTTONDOWN

T2 = clock();// цей рядок пишемо в обробник WM_RBUTTONDOWN

DT = T2 – T1;
Speed = S / DT

Тепер залишається тільки вивести значення в вікно.

Для виведення отриманих текстових рядків можна використати функцію TextOut(). Вона вигідна тим, що дозволяє виводити в визначені координати вікна.

Виведення отриманих рядків необхідно робити тільки в обробці повідомлення WM_PAINT. Нагадую, воно приходить тоді, коти операційна система вважає, що інформація в нашому вікні застаріла.

Якщо, нам потрібно згенерувати повідомлення WM_PAINT, то викликаємо функцію InvalidateRect(), яка повідомляє ОС про те що якась частина нашого вікна (або все вікно) застаріло. Виклик цієї функції ми робимо кожний раз, коли необхідно перемалювати вікно.

 

Додаткове (ускладнене завдання).

Знайти миттєву швидкість руху миші.
Підказка. Використовуєте програмований таймер, для отримання фіксованих проміжків часу, на яких визначайте відстань пройдену мишею, вона й буде швидкістю руху.