Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 218


/p>

Демонстрационная программа

Я думаю, что даже конспективного изложения достаточно для того, чтобы можно было начать работу с клавиатурой в консольной сессии. Разве не так, уважаемый читатель? Тем не менее, я привожу демонстра-

261

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

#include <windows.li>

#include <stdio.h>

main() {

HANDLE hStdlnputHandie, hStdOutputHandle; char cMyMessage[80] - "Do something with mouse to exit"; COORDCoord= {0,24}; DWORD dwResult; BOOL bMyFlag = TRUE; _INPUT^RECORD InputRecord; char cMyString[16]; char* cMyKeys[9] •= {" RAlt", " LAlt"," RCtrl", " LCtrl", " Shift", " NumLock",

" ScrollLock", " CapsLock"," EnhKey"); DWORD dwMyFlag;

FreeConsole();

AllocConsoleO;

SetConsoleTitle("Keyboard in console session demo program");

hStdlnputHandie = GetStdHandle(STDJNPUTJlANDLE);

hStdOutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);

SctConsoleCursorPosition(hStdOutputHand!e, Coord);

SetConsoleTextAttribute(hStdOutputHandIe, FOREGROUND_RF.D |

FOREGROUND_GREEN | FOREGROUND_BLUE); WriteConsole(hStdOutputHandle, cMyMcssage, strlen(cMyMessage), &dwResult,

NULL);

while(bMyFlag) t

ReadConsoleInput(hStdInputHandlc, &InputRecord, 1, &dwResult); if(dwResult>= 1) f

ir(InputRecord.EvcntType == KEY EVENT)

t »

SetConsoleCursorPosition(hStdOutputHandlc. Coord); SctConso!eTextAttribute(hStdOutputHandle,0); WritcConsole(hStdOutputHandle, cMyMcssage, strlen(cMyMessage),

&dwResull, NULL); for( int i = 0, i < 80; i Ч

cMyMessagcfi] ~ 0; C'oord.X - 0; Coord. Y= 1;

SetConsoleCursorPositioii(hStdOutput!iandle. Co»/rd); if(lnputRecord. Event. Key Event, b Key Down)

strcat(cMyMessagc, "Pressed "); else

262

strcat(cMyMcssage, "Released "); strcat(strcat(cMyMessage,

itoa(InputRccord.Event KcyEvent.wVirtualKeyCode,

cMyString, 16)),""); strcat(cMyMessage,




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



Книжный магазин