![]() |
|
|
Лабораторная работа: Розроблення програми на мові С для OS WindowsЛабораторная работа: Розроблення програми на мові С для OS WindowsМіністерство освіти і науки України Житомирський державний технологічний університет ФІКТ Кафедра ПЗОТ Група ПІ-39 Лабораторна робота №5 з курсу «Системне програмування» на тему: «KeyLock» м. Житомир 2011 р. ЗАГОЛОВОК Завдання. 3 Код програми. 4 Висновок. 8 1. Вивчити матеріал викладений у файлі допомоги 2. Створити програму, яка друкує в вікно інформацію про натискання клавіш на клавіатурі в подібну таблицю:
Код програми KEYLOOK.C #include <windows.h> #include <stdio.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; RECT rect ; //структура, яка буде мiстити розмiри вiкна int cxChar; //ширина символа int cyChar; //висота символа int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "KeyLook" ; HWND hwnd; //дескриптор вiкна MSG msg; //структура повiдомлення WNDCLASSEX wndclass; //структура класу вiкна wndclass.cbSize = sizeof (wndclass); //розмiр структури класу вiкна wndclass.style = CS_HREDRAW | CS_VREDRAW; //стиль класу вiкна wndclass.lpfnWndProc = WndProc; // вiконна процедура wndclass.cbClsExtra = 0; //резервування додатков. пам’ятi в структурi класу вiкна wndclass.cbWndExtra = 0; //резервування додатков. пам’ятi в структурi вiкна wndclass.hInstance = hInstance; //дескриптор екземпляра програми wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); //задання iконки wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); //задання курсораwndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); //задання кольору фону робоч. областi вiкна wndclass.lpszMenuName = NULL; //меню класу wndclass.lpszClassName = szAppName; // iм’я класу wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); //задання iконки для вiкон данного класу RegisterClassEx (&wndclass) ; hwnd = CreateWindow (szAppName, //iм’я классу вiкна " Keyboard Message Looker ", // заголовок вiкна WS_OVERLAPPEDWINDOW, // стиль вiкна CW_USEDEFAULT, // початкове положення по х CW_USEDEFAULT, // початкове положення по у CW_USEDEFAULT, // початковий розмiр по х CW_USEDEFAULT, // початковий розмiр по у NULL, // дескриптор батькiвського вiкна NULL, // дескриптор меню вiкна hInstance, // дескриптор екземпляра програми NULL) ; // параметри створення ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; //перемалювання робоч. областi вiкна while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); //передача структури в Windows DispatchMessage (&msg); //вiдправка повiдомлень вiконiй процедурi } return msg.wParam ; } void ShowKey (HWND hwnd, int iType, char *szMessage, WPARAM wParam, LPARAM lParam) { static char *szFormat[2] = { "%-14s %3d %c %6u %4d %3s %3s %4s %4s", "%-14s %3d %c %6u %4d %3s %3s %4s %4s" } ; char szBuffer[80] ; HDC hdc ; //дескриптор контексту пристрою ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ; hdc = GetDC (hwnd) ; //отримання дексриптора контексту пристрою SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; //вибiр шрифту TextOut (hdc, cxChar, rect.bottom - cyChar, szBuffer, wsprintf (szBuffer, szFormat [iType], szMessage, wParam, (BYTE) (iType ? wParam : ' '), LOWORD (lParam), //повторення натиснення клавiш HIWORD (lParam) & 0xFF, //скан код (PSTR) (0x01000000 & lParam ? "Yes" : "No"), //розширен. клавiатури (PSTR) (0x20000000 & lParam ? "Yes" : "No"), //чи натиснена клавіша Alt (PSTR) (0x40000000 & lParam ? "Down" : "Up"), //попереднiй стан клавiши (PSTR) (0x80000000 & lParam ? "Up" : "Down"))); //теперешнiй стан клавiши ReleaseDC (hwnd, hdc) ; //звiльнення дескриптора ValidateRect (hwnd, NULL) ; //вiкно не потребує перемальовування } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static char szTop[] = "Message Key Char Repeat Scan Ext ALT Prev Tran"; static char szUnd[] = "_______ ___ ____ ______ ____ ___ ___ ____ ____"; HDC hdc ; PAINTSTRUCT ps ; TEXTMETRIC tm ; switch (iMsg) { case WM_CREATE : //створення вiкна hdc = GetDC (hwnd); SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; GetTextMetrics (hdc, &tm) ; cxChar = tm.tmAveCharWidth ; cyChar = tm.tmHeight ; ReleaseDC (hwnd, hdc) ; rect.top = 3 * cyChar / 2 ; return 0 ; case WM_SIZE : //змiна розмiрiв вiкна rect.right = LOWORD (lParam) ; rect.bottom = HIWORD (lParam) ; UpdateWindow (hwnd) ; return 0 ; case WM_PAINT : //перемалювання вікна InvalidateRect (hwnd, NULL, TRUE) ; hdc = BeginPaint (hwnd, &ps) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; SetBkMode (hdc, TRANSPARENT) ; TextOut (hdc, cxChar, cyChar / 2, szTop, (sizeof szTop) - 1) ; TextOut (hdc, cxChar, cyChar / 2, szUnd, (sizeof szUnd) - 1) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_KEYDOWN : //при натисненні клавiші, яка не вiдобраається на екранi ShowKey (hwnd, 0, "WM_KEYDOWN", wParam, lParam) ; return 0 ; case WM_KEYUP : //при відпусканні клавiші, яка не вiдобраається на екранi ShowKey (hwnd, 0, "WM_KEYUP", wParam, lParam) ; return 0 ; case WM_CHAR : //при натисненнi на клавiшу яка вiдобраається на екранi ShowKey (hwnd, 1, "WM_CHAR", wParam, lParam) ; return 0 ; case WM_DEADCHAR : // при натисненнi на "нiму" клавiшу ShowKey (hwnd, 1, "WM_DEADCHAR", wParam, lParam) ; return 0 ; case WM_SYSKEYDOWN ://при натисненнi на клавiшу <ALT> ShowKey (hwnd, 0, "WM_SYSKEYDOWN", wParam, lParam) ; break ; case WM_SYSKEYUP : //при відпусканні клавіші ShowKey (hwnd, 0, "WM_SYSKEYUP", wParam, lParam) ; break ; case WM_SYSCHAR : //при натисненнi на <ALT> + <символьна клавiша> ShowKey (hwnd, 1, "WM_SYSCHAR", wParam, lParam) ; break ; case WM_SYSDEADCHAR : // при натисненнi на нiму клавiшу та <Alt> ShowKey (hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam) ; break ; case WM_DESTROY : //при закритi вiкна користувачем PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; } Висновок Отже, на даній лабораторній роботі було розроблено програму на мові С для OS Windows, яка виводить у вікно інформацію про натиснення клавіш клавіатури. програмування клавіатура windows |
![]() |
||
НОВОСТИ | ![]() |
![]() |
||
ВХОД | ![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |