на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Лабораторная работа: Розроблення програми на мові С для OS Windows


Лабораторная работа: Розроблення програми на мові С для OS Windows

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

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

ФІКТ

Кафедра ПЗОТ

Група ПІ-39

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

з курсу «Системне програмування»

на тему: «KeyLock»

м. Житомир

2011 р.


ЗАГОЛОВОК

Завдання. 3

Код програми. 4

Висновок. 8


Завдання

1. Вивчити матеріал викладений у файлі допомоги

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

Massege Key Char Repeat Scan Ext Alt Prev Tran

Код програми

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



на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.