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

Технічне обґрунтування та етапи розроблення програми на мові С для OS Windows, яка виводить у вікно запропонованої таблиці інформацію при натисненні клавіш клавіатури. Проблеми систем програмування. Резервування додаткової пам’яті в структурi класу вiкна.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык украинский
Дата добавления 04.04.2011
Размер файла 15,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

ФІКТ

Кафедра ПЗОТ

Група ПІ-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

Размещено на Allbest.ru


Подобные документы

  • Створення програми, яка друкує в вікно інформацію про натискання клавіш на клавіатурі в таблицю. Функція виведення назви отриманого програмою повідомлення від клавіатури та певних додаткових даних. Обробка інформації, неопрацьованої віконною процедурою.

    лабораторная работа [17,9 K], добавлен 14.05.2011

  • Загальна характеристика алгоритму та опис програми. Керівництво системного програміста. Особливості запуску програми в Linux, FreeBSD, Windows. Аналіз результатів тестування програми, що проектується, вивчення та оцінка її практичної ефективності.

    курсовая работа [91,4 K], добавлен 13.06.2014

  • Характеристика предметної області: FTP-server для ОС Windows. Шляхи встановлення FTP-серверу в ОС Windows. Опис мови та середовища програмування, компонентів та функцій програми. Аналіз реалізованої програми FTP-клієнта. Тестовий запуск та опис програми.

    курсовая работа [1,7 M], добавлен 22.06.2017

  • Основні розрахунки резисторів мікросхеми. Розробка алгоритму рішення задачі методом блок-схем. Характеристика та розробка програми на мові С++ з використанням принципів модульного і структурного програмування. План тестування і налагоджування програми.

    курсовая работа [2,9 M], добавлен 05.12.2012

  • Перегляд тексту за допомогою зручних та зрозумілих в користуванні програм-переглядачів текстових файлів. Розробка текстового редактора під Windows на мові програмування ASM-86 для здійснення основних дій над введеним текстом. Алгоритм та лістинг програми.

    курсовая работа [20,8 K], добавлен 08.08.2009

  • Розробка програми, яка б дозволяла протестувати знання з дисципліни "Програмування на мові С", виставити оцінку. Опис та обґрунтування методу організації вхідних та вихідних даних, вибору складу технічних та програмних засобів. Проведення лістингу.

    курсовая работа [11,0 K], добавлен 08.08.2009

  • Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.

    курсовая работа [41,0 K], добавлен 17.02.2009

  • Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.

    контрольная работа [50,3 K], добавлен 12.08.2012

  • Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.

    курсовая работа [102,5 K], добавлен 14.03.2013

  • Постановка задачі: створення списку співробітників інституту. Аналіз мов програмування та вибір мови PascalABC.Net - 32-розрядної програми, яка може працювати на сучасних версіях Windows. Опис функцій та процедур, реалізації інтерфейсу користувача.

    курсовая работа [277,8 K], добавлен 25.06.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.