Лабораторная работа : Обчислення координат курсору миші при переміщенні 


Полнотекстовый поиск по базе:

Главная >> Лабораторная работа >> Информатика, программирование


Обчислення координат курсору миші при переміщенні




Міністерство освіти і науки України

Житомирський державний технологічний університет

Лабораторна робота №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) ;

}

Висновок

Отже, при виконанні даної лабораторної роботи були здобуті навики обробки миші у вікні. В результаті, програма здатна виводити координати курсору миші при переміщенні, а також відображати відстань та швидкість з якою проходить курсор між двома обраними точками.

Похожие работы:

  • Microsoft Excel 97

    Реферат >> Информатика, программирование
    ... ід клацнути мишею по кнопці. При фіксації курсора миші на ... допомогою миші аналогічне переміщенню, але при цьому ... обмежуються подвійними лапками. При обчисленні формули спочатку виконуються ... Диапазон будуть відображені координати цього діапазону. Користувач ...
  • Використання комп'ютерної техніки в суспільстві, роль програмного забезпечення

    Реферат >> Информатика, программирование
    ... нього курсор стрілками на клавіатурі або мишею І ... Кожна клітинка має дві координати - цифрову (1, 2, 3,...), що ... зручність автоматичного перерахунку і повторюваних обчислень; ■ поєднання різних ... Примітка. При переміщенні аркушів або при копіюванні в іншу ...
  • Оптимальне використання складських приміщень на ТД ДП "Сандора"

    Дипломная работа >> Экономико-математическое моделирование
    ... координати початкової крапки;  - початкове значення кроку; - точність обчислень. Обчислення ... . Якщо клацнути мишею на розташованій праворуч ... вікні Додавання обмеження курсор перебуває ліворуч у ... природна вентиляція, при якій переміщення повітря відбува ...
  • Використання OpenGL. Моделювання вогню

    Курсовая работа >> Информатика, программирование
    ... координати текстури. Якщо дозволено освітлення, то тут виконуються обчислення ... підпрограму для зворотного виклику при переміщенні миші з натиснутою кнопкою. Управл ... ChangeDisplaySettings(NULL,0); ShowCursor(TRUE);// Відображення курсора } if (hRC) { if (! ...
  • Використання діаграм при обробці табличної інформації

    Дипломная работа >> Информатика, программирование
    ... виконувати певні обсяги обчислень. У багатьох випадках ... Курсор при цьому перетворюється в мініатюрну діаграму. Натиснувши ліву кнопку миші, слід тягнути курсор ... включає зміну при будь-якому переміщенні діаграми в ... перевірити правильність обрання осі координат ...
  • Access і Visual basic for Application. Excel VBA: прийоми програмування

    Реферат >> Информатика, программирование
    ... отримання результату, визначаються параметри обчислень і т.д. 4.1 Створення ... подвійне клацання мишею на рядку Програми ... модуля. При переміщенні курсора з рядка коду програма автоматично перевіря ... курсора ActiveCell. Row і ActiveCell. Column - покажуть координати ...
  • Інформаційні системи в маркетингу

    Учебное пособие >> Маркетинг
    ... пертекстова технологія передбачає переміщення від одних об'єктів ... ліву кнопку миші і, не відпускаючи її, перемістити курсор миші на ім'я ... Диапазон будуть відображені координати цього діапазону. ... 8.3 наведені результати обчислень при значенні се­редньої, ...
  • Вивчення елементів стереометрії у курсі геометрії 9 класу

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

    Отчет по практике >> Коммуникации и связь
    ... сть операндів, що є координатами клітинок, з’єднаних ... виділення тексту мишею слід встановити курсор миші на початок ... за допомогою миші аналогічне переміщенню, але при цьому ... і обмежуються подвійними лапками. При обчисленні формули спочатку виконуються операції ...
  • Метод вейвлет-перетворення

    Курсовая работа >> Коммуникации и связь
    ... щений у незвичну для нього обстановку. Тому неможливо використовувати прості методи обчислення пер ... координату, значення і похідні ФПГ у місці, де знаходиться курсор маніпулятора "миша" ... - опції, використовувані при обчисленнях і при збереженні даних: Рисунок ...