LINUX.ORG.RU

Xlib


0

1

Здравствуйте, собственно вопрос, как там можно обрабатывать сочетания клавиш допустим Ctrl+O или что то подобное я нашел пример,там написано что выход происходит по нажатию Shift+Control+A, но я не особо понимаю где это происходит, и вообще она по моему не рабочая

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;
   }
}
и еще вопрос мне нужно обрабатывать события перекрытия окна за это отвечает событие VisibilityNotify,а как мне узнать какое именно событие произошло? я знаю что за это отвечает переменная state но как к ней обратиться? event.xvisibility.state?



Последнее исправление: mikemike (всего исправлений: 1)

Игру делаешь ?
Зачем тебе ХЛиб.... возьми СДЛ :)

Jetty ★★★★★
()
Ответ на: комментарий от anonymous

не по заданию нужно xlib спасибо попробую а что на счет второй части вопроса «мне нужно обрабатывать события перекрытия окна за это отвечает событие VisibilityNotify,а как мне узнать какое именно событие произошло? я знаю что за это отвечает переменная state но как к ней обратиться? event.xvisibility.state?»

mikemike
() автор топика
Ответ на: комментарий от mikemike

Опять же, скастовать к XVisibilityEvent и заюзать state. Типо XVisibilityEvent *xvev = &rEvent;

Я так-то xlib хреново знаю и работал с ней только пару раз, но там с эвентами везде одинаковый способ - проверяем тип эвента и кастуем к нужному.

посмотри /usr/include/X11/Xlib.h там typedef union _XEvent { int type; куча эвентов } XEvent; таки дела

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.