Лабораторна робота №3 Введення даних з клавіатури та миші

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
КН
Кафедра:
Інформаційних систем та мереж (ІСМ)

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Проблемно орієнтоване програмування
Група:
КН 27
Варіант:
7

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Кафедра інформаційних систем та мереж Лабораторна робота №3 з курсу «Проблемно-орієнтоване програмування» на тему: «Введення даних з клавіатури та миші» ЛЬВІВ 2016 Мета роботи: Метою роботи є вивчення способів опрацювання повідомлень від клавіатури і миші для введення даних. Теоретичні відомості: Натискання будь-якої клавіші автоматично посилає системі апаратне повідомлення, яке обробляється і надсилається додатком. За цю операцію відповідає повідомлення WM_KEYDOWN. Його опис складно і на даному етапі не має сенсу, так як ми не включили кирилицю. При посилці цього повідомлення вwParameter записується значення натиснутоюклавіші. Звичайно ж, все залежить від клавіатури, розкладки. Тому все кодів для клавіш багато і ми не будемо описувати, що робити при натисканні тієї чи іншої, а просто виключимо значення не потрібних нам клавіш. Ми обробляємо повідомлення WM_KEYDOWN (натискання клавіші). Спочатку ми створюємо перемикач switch для значення wParameter, куди записаний ідентифікатор клавіші.  Ми виключаємо значення home, кінець, вгору на сторінку, вниз на сторінку, стрілка вліво, стрілка вправо, стрілка вгору, стрілка вниз, видаляти, зрушення, простір, Ctrl, ковпачки блокування, Alt, рахунок, Backspace, enter відповідно. Можливо, на Тобто якщо в ідентифікаторі wParameter у нас ці значення, ми нічого не робимо - оператор break. А під значеннями default у нас виконується перетворення. Ми створили статичну рядок типу char з 2-х елементів. Статична вона, тому що в процесі роботи програми ми неодноразово виходимо з WindowProcess() в цикл обробки зGetMessage(), розташований в WinMain(), а значення клавіші нам потрібно зберігати. Ми ініціалізіруем її перший елемент wParameter-ом. Далі викликаємо функцію InvalidateRect(), після чого виходимо з WM_KEYDOWN. Першим параметром йде - дескриптор вікна, другим - область майбутнього «затирання» вікна (NULL - Все вікно перемальовується в WM_PAINT), третім параметром йде «затирання» фону (якщо TRUE, то стираємо). При цьому ми автоматично надсилаємо додатком messageWM_PAINT і вікно перемальовується заново. Для чого це потрібно? У випадках згортання, переміщення вікна викликається WM_PAINT. Нам же це потрібно зробити явно, тобто зробити вікно недійсним, для того, щоб відразу вивести значення натиснутоюклавіші на екран. Інакше вона з'явиться тільки тоді, коли ми почнемо маніпулювати вікном. У ній оголошений екземпляр класу HFONT, який відповідає за шрифт, його розмір та інші премудрості. Він буде використовуватися в WM_PAINT. Є обробник повідомлення WM_CREATE. Він спрацьовує, коли створюється вікно, тобто викликається функціяCreateWindow(). На цьому етапі вирішено створити додаткове вікно з повідомленням для зручності Варіант №7 Порядок виконання роботи 1. Використовуючи рекомендовані літературні джерела та джерела Internet, вивчити API- функції та повідомлення клавіатури і миші для введення даних, необхідних для роботи програми. 2. Ознайомитися з наведеним у роботі прикладом програми роботи з клавіатурою та мишею. 3. Розробити програму згідно виданого завдання. Номери завдань визначаються як залишок від цілочисельного ділення порядкового номера студента (у впорядкованому за алфавітом повному списку студентів групи) на кількість завдань. 4. Реалізувати програму та отримати результат її роботи. / Код програми: // Win32Project1.cpp: определяет точку входа для приложения. // #include "stdafx.h" #include "Win32Project1.h" #include "Resource.h" #define ID_TIMER 1122 #include <windows.h> #define MAXPOINTS 1000 #define MoveTo(hdc, x, y) MoveToEx(hdc, x, y, NULL) LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //HBRUSH hBrush = HBRUSH(CreateSolidBrush(RGB(255, 235, 205))); void myString( int& i, HDC hdc); void DrawFigures(HWND hWnd); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { wchar_t szAppName[] = L"Connect"; 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, L"Connect-the-Points Mouse Demo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HPEN hOldP, hNewP; HBRUSH hOldB, hNewB; static POINT points[MAXPOINTS]; static int iCount; static int d = 0; static int h = 0; static BOOL ff= TRUE; static int cxClient, cyClient; //static HPEN hPen=CreatePen(1,10,RGB(255, 235, 205)); cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); int R = 3; HDC hdc; PAINTSTRUCT ps; int i, j; switch(iMsg) { case WM_SIZE : cyClient = HIWORD(lParam); cxClient=LOWORD(lParam); return 0; case WM_LBUTTONDOWN : if(LOWORD(lParam)>1 && LOWORD(lParam)<1100 && HIWORD(lParam)<20) { SetTimer(hwnd, ID_TIMER, 100, NULL); ff = TRUE; } else if(LOWORD(lParam)>350 && LOWORD(lParam)<700 && HIWORD(lParam)>200 && HIWORD(lParam)<350) { PostMessage(hwnd, WM_QUIT, 0, 0); } case WM_TIMER: if (wParam == ID_TIMER) { if(ff == TRUE) { d += 1; InvalidateRect(hwnd, NULL, TRUE); } } break; return 0; case WM_LBUTTONUP : InvalidateRect(hwnd, NULL, FALSE); return 0; case WM_PAINT : RECT r; hdc = BeginPaint(hwnd, &ps); myString( d,hdc); //hdc = BeginPaint(hwnd, &ps); hNewP = CreatePen(PS_SOLID, 1, RGB(0, 112, 255)); hNewB = CreateSolidBrush(RGB(0, 112, 255)); hOldP = (HPEN)SelectObject(hdc, hNewP); hOldB = (HBRUSH)SelectObject(hdc, hNewB); Rectangle(hdc, 350, 200, 700, 350); SelectObject(hdc, hOldP); SelectObject(hdc, hOldB); TextOut(hdc, 515, 268, L"Вихід", 5); EndPaint(hwnd, &ps); return 0; case WM_COMMAND: { int wmId = LOWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_EXIT: DestroyWindow(hwnd); break; default: return DefWindowProc(hwnd, iMsg, wParam, lParam); } } case WM_DESTROY : PostQuitMessage(0); return 0; case WM_RBUTTONDOWN : if(LOWORD(lParam)>1 && LOWORD(lParam)<1100 && HIWORD(lParam)<20) ff = FALSE; return 0; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } void myString(int& i, HDC hdc) { TextOut(hdc, i,4 , L"io o o o o p p p p poi", 22); i += 1; if (i > 1100) i = 0; } void DrawFigures(HWND hWnd) { HDC hdc; PAINTSTRUCT ps; RECT r; HPEN hPen; hdc=BeginPaint(hWnd, &ps); //Draw rectangle SetRect(&r,150, 230, 450, 350); ValidateRect(hWnd, NULL); EndPaint(hWnd, &ps); } Результат роботи: / / Висновок: Я навчився опрацьовувати повідомлення з клавіатури та миші. Також здобув навички з виводу на екран простих геометричних фігур різного кольору.
Антиботан аватар за замовчуванням

10.11.2016 20:11-

Коментарі

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

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!