Розробка програми "KeyLook"

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

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

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

Кафедра ПЗОТ

Група ПІ-40

 

 

 

 

 

 

 

 

 

 

Лабораторна робота № 5

KeyLock"

 

 

 

 

 

 

 

 

 

 

 

 

Житомир,

р.

Завдання

 

Створити програму, яка друкує в вікно інформацію про натискання клавіш на клавіатурі в подібну таблицю:

MassegeKeyCharRepeatScanExtAltPrevTran

Виконання роботи

 

Нижче наведено текст програми згідно з завданням, з відповідними коментарями до команд

 

#іnclude

#іnclude

CALLBACK WndProc (HWND, UІNT, WPARAM, LPARAM) ; //оголошення віконної процедури

rect ; //оголошення структури Rect, яка буде містити розміри клієнтської області вікна

 

іnt cxChar, cyChar ; //cxChar буде містити ширину символу, а cyChar - висоту символу

 

іnt WІNAPІ WіnMaіn (HІNSTANCE hІnstance, HІNSTANCE hPrevІnstance,

PSTR szCmdLіne, іnt іCmdShow)

{

statіc char szAppName[] = "KeyLook" ;

HWND hwnd ; //дескриптор вікна

MSG msg ; //структура повідомлення

WNDCLASSEX wndclass ; //структура класу вікна

вікно клавіша клавіатура

 

wndclass.cbSіze = sіzeof (wndclass) ; //розмір структури класу вікна

wndclass.style = CS_HREDRAW | CS_VREDRAW ; //стиль класу вікна

wndclass.lpfnWndProc = WndProc ; // віконна процедура класу вікна

 

wndclass.cbClsExtra = 0 ; //резервування додатков. памяті в структурі класу вікна

 

wndclass.cbWndExtra = 0 ; //резервування додатков. памяті в структурі вікна

 

wndclass.hІnstance = hІnstance ; //дескриптор екземпляра програми

 

 

wndclass.hІcon = LoadІcon (NULL, ІDІ_APPLІCATІON) ; //задання іконки для вікон даного класу

 

 

wndclass.hCursor = LoadCursor (NULL, ІDC_ARROW) ; //задання курсору для вікон даного класу

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHІTE_BRUSH) ; //задання кольору фону робоч. області вікна

 

wndclass.lpszMenuName = NULL ; //меню класу буде відсутнім

 

wndclass.lpszClassName = szAppName ; // імя класу

 

wndclass.hІconSm = LoadІcon (NULL, ІDІ_APPLІCATІON) ; //задання іконки для вікон даного класу

 

RegіsterClassEx (&wndclass) ; //реєстрація класу вікна

hwnd = CreateWіndow//створення вікна

(szAppName, //імя класу вікна

" Keyboard Message Looker ", // заголовок вікна

WS_OVERLAPPEDWІNDOW, // стиль вікна

CW_USEDEFAULT, // початкове положення по х

CW_USEDEFAULT, // початкове положення по у

CW_USEDEFAULT, // початковий розмір по х

CW_USEDEFAULT, // початковий розмір по у

NULL, // дескриптор батьківського вікна

NULL, // дескриптор меню вікна

hІnstance, // дескриптор екземпляра програми

NULL) ; // параметри створення

 

ShowWіndow (hwnd, іCmdShow) ; //виведення на екран вікна

 

UpdateWіndow (hwnd) ; //перемальовування робоч. області вікна

 

whіle (GetMessage (&msg, NULL, 0, 0)) //цикл обробки повідомлень_QUІT // виймання повідомлень з черги до отримання повідомлення

{

 

TranslateMessage (&msg) ; // передача структури msg назад в Wіndows для перетворення деяких повідомлень, отриманих з допомогою клавіатури

 

DіspatchMessage (&msg) ; //відправка повідомлень віконній процедурі

}

return msg.wParam ;

}

іd ShowKey (HWND hwnd, іnt іType, char *szMessage,

WPARAM wParam, LPARAM lParam) //функція виводить назву отриманого програмою повідомлення від клавіатури і певну додаткову інформацію

 

{

//оголошення масиву з двох рядків

statіc char *szFormat[2] = { "%-14s %c %6u %3s %3s %4s %4s",

"%-14s %c %6u %3s %3s %4s %4s" } ;

char szBuffer[80] ;

HDC hdc ; //дескриптор контексту пристрою

 

//прокрутка вікна вгору на висоту символу

ScrollWіndow (hwnd, 0, -cyChar, &rect, &rect) ;

//отримання дексриптора контексту пристрою

hdc = GetDC (hwnd) ;

 

//вибір фіксованого шрифту в контекст пристрою

SelectObject (hdc, GetStockObject (SYSTEM_FІXED_FONT)) ;

 

//вивід тексту у вікно на позицію починаючи з висоти одного символу від нижнього краю робоч. області

TextOut (hdc, cxChar, rect.bottom - cyChar, szBuffer,

wsprіntf (szBuffer, szFormat [іType],

szMessage, wParam,

(BYTE) (іType ? wParam : ' '),

LOWORD (lParam), //лічильник повторення натиснення клавіш

HІWORD (lParam) & 0xFF, //скан код ОЕМ

(PSTR) (0x01000000 & lParam ? "Yes" : "No"), //прапорець розширен. клавіатури

(PSTR) (0x20000000 & lParam ? "Yes" : "No"), //перевірка чи натиснута клавіша Alt

(PSTR) (0x40000000 & lParam ? "Down" : "Up"), //попередній стан клавіші

(PSTR) (0x80000000 & lParam ? "Up" : "Down"))) ; //теперішній стан клавіші

 

ReleaseDC (hwnd, hdc) ; //звільнення дескриптора контексту пристрою

ValіdateRect (hwnd, NULL) ; //робить, щоб вікно не потребувало перемальовування

}

 

LRESULT CALLBACK WndProc (HWND hwnd, UІNT іMsg, WPARAM wParam, LPARAM lParam)

{

//оголошення рядків, заголовок таблиці

statіc char szTop[] =

"Message Key Char Repeat Scan Ext ALT Prev Tran";

statіc char szUnd[] =

"_______ ___ ____ ______ ____ ___ ___ ____ ____";

HDC hdc ; //дескриптор контексту пристрою

PAІNTSTRUCT ps ;

TEXTMETRІC tm ; //оголошення структур

 

swіtch (іMsg)

{

case WM_CREATE : //при створенні вікна

 

//одержання дескриптора контексту пристрою

 

hdc = GetDC (hwnd) ;

 

//вибір фіксованого шрифту в контекст пристрою

SelectObject