Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L_2.docx
Скачиваний:
2
Добавлен:
16.11.2019
Размер:
208.13 Кб
Скачать

БЕЛАРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет Информационных Технологий и Робототехники

Кафедра «Программное обеспечение вычислительной техники и автоматизированных систем»

ОТЧЕТ

по лабораторной работе №2

дисциплина

«Системное программирование»

тема

«Программирование внешних устройств»

Выполнил:

Проверил: Разорёнов Н.А.

Минск 2011

Цель работы

Изучить основы программирования аппаратных устройств: клавиатуры, мыши, таймера.

Изучаемые вопросы

  1. Клавиатура.

    1. Механизм сообщений от клавиатуры.

    2. Коды OEM, ANSI, ASCII, виртуальные коды.

    3. Виртуальные клавиши.

    4. Символьные сообщения.

    5. Системные сообщения.

    6. Преобразование кодов.

    7. Как отличить нажатия совпадающих клавиш.

    8. Как узнать ввод строчных и прописных букв.

    9. Фокус ввода.

  2. Мышь.

    1. Захват и освобождение окном мыши.

    2. Обработка сообщений от мыши.

    3. Координаты x, y.

    4. Курсор мыши. Управление курсором.

    5. Сообщения мыши в клиентской и не клиентской области окна.

  3. Таймер.

    1. Установка и снятие таймера.

    2. Функция таймера.

Постановка задачи

На базе архитектуры WIN 32 Application создать многооконное приложение, где первое окно отображает информацию по клавиатуре, второе окно отображает информацию по мыши и третье окно отображает информацию по таймеру.

Родительское окно №1

111

Родительское окно №2

222

333

Родительское окно №3

Рис. 1- Схема расположения окон и их начальное положение

GM

Ход выполнения работы

  1. Механизм сообщений от клавиатуры.

Очередь сообщений

программы

Системная очередь сообщений

Оконная

процедура

Драйвер

Клавиатура

Мышь

Таймер

Скан код ОЕМ сообщение(вирт.код) сообщение (вирт.код)

  1. Коды oem, ansi, ascii, виртуальные коды.

LRESULT CALLBACK WndProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)

{switch (message)

{case WM_KEYDOWN:

step=step+26;

//виртуальный код в сообщении WM_KEYDOWN хранится в wParam

nBufSize=wsprintf(szBuf, L"%x", wParam);

TextOut(hdc, 158, step, szBuf, nBufSize);

//ОЕМ код в сообщении WM_KEYDOWN хранится в lParam с 16 по 23 биты

nBufSize=wsprintf(szBuf, L"%lx", lParam>>16);

TextOut(hdc, 210, step, szBuf, nBufSize);

//данная функция преобразует виртуальный код клавиши в ascii.

i=MapVirtualKey(wParam,2);

nBufSize=wsprintf(szBuf, L"%d", iBuf);

TextOut(hdc, 240, step, szBuf, nBufSize);

break;

case WM_CHAR:

//код ansi в сообщении WM_CHAR хранится в wParam

nBufSize=wsprintf(szBuf, L"%lx", wParam);

TextOut(hdc, 330, step, szBuf, nBufSize);

break;

break;}}

  1. Виртуальные клавиши.

// wParam сообщения нажатия клавиши содержит ее виртуальной код. Оконная процедура обрабатывает (игнорирует) сообщения, в зависимости от значения виртуальной клавиши.

// В данной работе иллюстрация работы мыши производится в окне №3.

LRESULT CALLBACK WndProc3(HWND hWnd3, UINT message, WPARAM wParam, LPARAM lParam)

{case WM_KEYDOWN:

switch(wParam)

{case VK_LEFT: // стрелка влево

break;

case VK_RIGHT: // стрелка вправо

break;

case VK_UP: // стрелка вверх

break;

case VK_DOWN: // стрелка вниз

break;

case VK_TAB: // обработчик клавиши TAB

break;

break;}}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]