Обчислення координат курсору миші при переміщенні
Технічне обґрунтування та етапи розроблення програми, яка здатна виводити координати курсору миші при переміщенні, а також відображати відстань та швидкість, з якою проходить курсор між двома обраними точками. Основні елементи та загальні правила роботи.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | украинский |
Дата добавления | 04.04.2011 |
Размер файла | 14,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Житомирський державний технологічний університет
Лабораторна робота №6
з курсу «Системне програмування»
на тему: «Миша»
м. Житомир
2011 р.
Зміст
- Завдання 3
- Хід роботи 4
- 1. Виведення координат миші у вікні. 4
- 2. Відстань між двома точками у вікні. 4
- Програмний код 5
- Висновок 10
Завдання
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(), яка повідомляє ОС про те що якась частина нашого вікна (або все вікно) застаріло. Виклик цієї функції ми робимо кожний раз, коли необхідно перемалювати вікно.
Програмний код
#include <windows.h>
#include <math.h>
#include <time.h>
#include <tchar.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int cX, cY, sX,sY;
double speed;
double T1 = 0, T2 = 0;
double S = 0;
int wayOnTable;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = _T("HelloWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ;
wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;
RegisterClassEx (&wndclass) ;
hwnd = CreateWindow (szAppName, // window class name
_T("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
RECT rectInv;
int x, y;
rectInv.top = 0;
rectInv.left = 0;
rectInv.right = 400;
rectInv.bottom = 60;
switch (iMsg)
{
case WM_CREATE :
return 0 ;
case WM_MOUSEMOVE:
cX = LOWORD(lParam);
cY = HIWORD(lParam);
InvalidateRect(hwnd, &rectInv, true);
return 0;
case WM_LBUTTONDOWN:
sX = LOWORD(lParam);
sY = HIWORD(lParam);
T1 = clock();
S = 0;
speed = 0;
wayOnTable = 0;
return 0;
case WM_RBUTTONDOWN:
x = LOWORD(lParam);
y = HIWORD(lParam);
S = sqrt((double)(( x - sX ) * ( x - sX ) + ( y - sY ) * ( y - sY)));
T2 = clock();
speed = (S / max(0.01, (T2 - T1))/ CLOCKS_PER_SEC);
wayOnTable = S / 25 ;
InvalidateRect(hwnd, &rectInv, true);
return 0;
case WM_PAINT :
TCHAR str[40];
TCHAR way[45];
TCHAR way2[45];
_stprintf(str, _T(" X = %d Y = %d "), cX, cY );
_stprintf(way, _T("Миша пройшла %d пікселів зі шв. %lf"), (int)S, speed);
_stprintf(way2, _T("Миша пройшла %d мм по столу"), wayOnTable);
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
TextOut(hdc, 5, 5, str, _tcslen(str));
TextOut(hdc, 5, 25, way, _tcslen(way));
TextOut(hdc, 5, 45, way2, _tcslen(way2));
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
Висновок
Отже, при виконанні даної лабораторної роботи були здобуті навики обробки миші у вікні. В результаті, програма здатна виводити координати курсору миші при переміщенні, а також відображати відстань та швидкість з якою проходить курсор між двома обраними точками.
Размещено на Allbest.ru
Подобные документы
Клавіатура як один з найважливіших пристроїв комп’ютера, її призначення та конфігурація. Основні види клавіатури, їх характеристика та відмінні риси, порядок і правила діагностування. Методика пошуку несправностей і ремонту. Побудова миші та трекболів.
курсовая работа [182,2 K], добавлен 24.05.2009Технічне обґрунтування та етапи розроблення програми на мові С для OS Windows, яка виводить у вікно запропонованої таблиці інформацію при натисненні клавіш клавіатури. Проблеми систем програмування. Резервування додаткової пам’яті в структурi класу вiкна.
лабораторная работа [15,5 K], добавлен 04.04.2011Поняття мови програмування С++, її сутність та особливості, призначення та використання. Структура програми, її основні елементи та загальні правила роботи. Охорона праці при роботі з обчислювальною технікою. Апаратні вимоги для виконання програми.
курсовая работа [126,2 K], добавлен 29.03.2009Стандарти OpenMP i MPI як основні засоби програмування для багатопроцесорних систем. Розробка програми паралельного розрахунку інтеграла для функції з певним кроком дискретизації, паралельної програми множення квадратної матриці на квадратну матрицю.
курсовая работа [2,5 M], добавлен 11.12.2013Теоретичні відомості. Блок-схема. Текст програми. Результати роботи програми. Процедури і функції. Координати, вікна, сторінки. Багатокутники. Дуги, кола, еліпси. Фарби, палітри, заповнення. Збереження і видача зображень. Виведення тексту. Включення драйв
курсовая работа [345,2 K], добавлен 17.12.2005Функціональне моделювання діяльності студії та виявлення задач до автоматизації. Технічне завдання на розроблення автоматизованої системи. Обґрунтування вибору програмних засобів для розроблення системи. Алгоритми рішення, забезпечення виконання функцій.
дипломная работа [2,7 M], добавлен 19.11.2010Робочий стіл, панель інструментів, меню. Основні дії над об’єктами в ОС Windows. Створення папок та ярликів. Перейменування, переміщення, знищення та копіювання папок та файлів. Прийоми керування за допомогою миші. Запуск блокнота та його призначення.
лабораторная работа [5,2 M], добавлен 15.10.2015Обчислення наближеного значення суми спадного ряду. Складання блок-схеми та програми, яка б виводила на друк сгенерований, сформований та впорядкований масиви. Використання операторів умовного переходу If - Then - Else. Розроблення програми на VBA.
практическая работа [51,7 K], добавлен 09.11.2009Мета і основні етапи формування курсової роботи з дисципліни "Прикладна теорія цифрових апаратів". Вимоги до змісту та основні правила оформлення даної роботи, її значення в учбовому процесі студентів. Принципи кодування інформації та перетворення кодів.
методичка [874,3 K], добавлен 18.12.2010Програмна реалізація алгоритму пошуку найкоротшого шляху між двома будь-якими вершинами графа. Загальні відомості про графи. Особливості роботи в середовищі. Опис структури програми та програмних засобів. Схема програмної реалізації алгоритму Дейкстри.
курсовая работа [676,7 K], добавлен 20.03.2011