Программирование для IBM OS2


Приложение KBDMSG


Изучение параметров сообщения WM_CHAR удобно выполнять с помощью приложения KBDMSG, которое отображает эти параметры в своем окне (рис. 5.1).

Рис. 5.1. Просмотр клавиатурных сообщений в окне приложения KBDMSG

В столбце VKEY отображается виртуальный код нажатой клавиши, в столбце SCAN - аппаратный скан-код, в столбце FS - флаги. Далее в столбце REPT отображается счетчик повторений и в столбце CHAR - символ (только для символьных клавиш).

Когда вы нажимаете очередную клавишу, текущее содержимое главного окна приложения сдвигается вверх и на экране появляется строка, соответствующая сообщению от нажатой клавиши. После отжимания клавиши появляется еще одна строка.

Исходные тексты приложения приведены в листинге 5.1.

Листинг 5.1. Файл kbdmsg\kbdmsg.c

// ================================================= // Определения // =================================================

#define INCL_WIN #define INCL_GPI #define INCL_WINDIALOGS #include <os2.h> #include <stdio.h> #include <string.h> #include "kbdmsg.h"

// Прототип функции окна приложения MRESULT EXPENTRY WndProc(HWND, ULONG, MPARAM, MPARAM);

// ================================================= // Глобальные переменные // =================================================

HAB hab; HWND hWndFrame; HWND hWndClient;

CHAR szAppTitle[] = "Keyboard Messages";

// Размеры окна Client Window SHORT cxClient; SHORT cyClient;

// Размеры символов выбранного шрифта SHORT cxChar, cyChar, cyDesc;

// Заголовок столбцов CHAR szTitle[] = "VKEY SCAN FS REPT CHAR";

// ================================================= // Главная функция приложения main // =================================================

int main () { HMQ hmq; QMSG qmsg; BOOL fRc;

// Флаги для создания окна Frame Window ULONG flFrameFlags = FCF_SYSMENU | FCF_TITLEBAR | FCF_MINMAX | FCF_SIZEBORDER | FCF_SHELLPOSITION | FCF_TASKLIST | FCF_ICON;

// Имя класса главного окна CHAR szWndClass[] = "KBDMSG";

hab = WinInitialize (0); if(hab == NULLHANDLE) { WinMessageBox (HWND_DESKTOP, HWND_DESKTOP, "Ошибка инициализации", "Ошибка", 0, MB_ICONHAND | MB_OK); return(-1); }




Начало  Назад  Вперед