2.3.1.4. Пример программы, работающей с клавиатурой.

    В данном разделе приводится фрагмент программы, которая распознает функциональные клавиши <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; } } ........