DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

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

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

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

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

Про що ця робота

Документ містить звіт про виконання лабораторної роботи з проблемно-орієнтованого програмування. У роботі досліджуються апаратні повідомлення клавіатури та миші у середовищі Win32 API.

У роботі розглядаються

  • Проблемно-орієнтоване програмування
  • Win32 API
  • Обробка повідомлень клавіатури
  • Обробка подій миші
  • Графічний інтерфейс Windows
  • Програмування на C++

Зміст і розділи

  1. Мета роботи
  2. Теоретичні відомості
  3. Порядок виконання роботи
  4. Код програми
  5. Результат роботи
Для кого:Студенти технічних спеціальностей, викладачі програмування
Викладачі:Кравець П.О.

Ключові поняття

Win32 APIWM_KEYDOWNWM_PAINThWndWPARAMLPARAMWndProcInvalidateRectWinMainрозробка програм

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Кафедра інформаційних систем та мереж Лабораторна робота №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); } Результат роботи: / / Висновок: Я навчився опрацьовувати повідомлення з клавіатури та миші. Також здобув навички з виводу на екран простих геометричних фігур різного кольору.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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