В данном разделе приводится фрагмент программы, которая распознает функциональные клавиши <F1>-<F5>, и при их нажатии печатает соответствующую строку. Программа также сопоставляет комбинации <Shift+Control+A> строку "EXIT". Эта комбинация используется для завершения программы.
........
Display *prDisplay;
int nScreenNum;
GC prGC;
XEvent rEvent;
Window nWnd;
char sKeyStr[20];
KeySym nKeySym, naModList[2];
int n;
/* Устанавливаем связь с сервером, получаем номер экрана . . . */
.........
/* Задаем соответствие символ-строка */
naModList[0] = XK_Control_L;
naModList[1] = XK_Shift_L;
XRebindKeysym (prDisplay, XK_F6, naModList, 2, "EXIT",
strlen ("EXIT"));
/* Цикл получения и обработки событий */
white (1) {
XNextEvent (prDisplay, &rEvent);
switch (rEvent.type) {
......
case KeyPress :
/* Очищаем строку */
memset (sKeyStr, 0, sizeof (sKeyStr));
/* Получаем строку, соответствующую событию */
XLookupString (&rEvent.xkey, sKeyStr),
sizeof (sKeyStr), &nKeySym, NULL);
if ( !strcmp (sKeyStr, "EXIT"))
{
XFreeGC (prDisplay, prGC);
XCloseDisplay (prDisplay);
exit (0);
}
n = nKeySym == XK_F1 ? 1 :
nKeySym == XK_F2 ? 2 :
nKeySym == XK_F3 ? 3 :
nKeySym == XK_F4 ? 4 :
nKeySym == XK_F5 ? 5 : 0;
if (n) {
sprintf (sKeyStr, "F%d pressed.", n);
XClearWindow (prDisplay, nWnd);
XDrawString (prDisplay, nWnd, prGC, 10, 50,
sKeyStr, strlen (sKeyStr));
}
break;
}
}
........
|