Я создаю приложение с идентификатором окна X11, чтобы нарисовать прямоугольник.
Проблема в том, что я не могу ничего рисовать в окне.Выберите конкретное окно X11
1
A
ответ
1
Одна очевидная ошибка в том, что вы не выбрали ExposureMask
в вызове XSelectInput
, так что вы не будете получать Expose
события вы ждали.
Другой возможной проблемой является не задание цвета чертежа переднего плана GC
по XSetForegroundColor
, по умолчанию черный. И использование по умолчанию gc экрана может завершиться неудачно, если окно имеет разную глубину цвета или различную визуальную. Другими важными атрибутами GC являются subwindow_mode
(нужно ли рисовать дочерние окна).
По-прежнему, после выполнения этих изменений программа работает только для меня (рисует прямоугольник) в корневом окне и xev, но не для xterm, не выставляет события.
Это моя неподвижная версия:
#include <X11/Xlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main (int argc, char *argv[]){
Window win;
Display *display;
XEvent e;
display = XOpenDisplay(NULL);
if(display==NULL){
fprintf(stderr,"Cannot open Display\n");
exit(1);
}
int s = DefaultScreen(display);
//unsigned long *id = (unsigned long*)(argv[1]);
sscanf(argv[1], "0x%x", &win);
if(!XSelectInput(display,win,StructureNotifyMask | ExposureMask)){
fprintf(stderr,"Cannot select Display\n");
return -1;
}
if(!XMapWindow(display,win)){
fprintf(stderr,"Cannot map Display\n");
return -1;
}
XGCValues gcv;
gcv.subwindow_mode = IncludeInferiors;
GC gc = XCreateGC(display, win, GCSubwindowMode,
&gcv);
XSetForeground(display, gc, 0xff00ff00);
XSetPlaneMask(display, gc, 0xffffffff);
while (1) {
puts("waiting for event\n");
XNextEvent(display, &e);
puts("got event\n");
if (e.type == Expose) {
printf("drawing\n");
XFillRectangle(display, win, gc, 20, 20, 100, 100);
}
if (e.type == KeyPress)
break;
}
return 0;
}
Смежные вопросы
- 1. X11 Полноэкранное окно (OpenGL)
- 2. X11/Xlib: Окно всегда сверху
- 3. Внедрение QWidget в окно X11
- 4. Powershell выберите конкретное значение
- 5. Выберите конкретное значение XPath
- 6. Выберите конкретное значение из таблицы
- 7. TSQL Условно выберите конкретное значение
- 8. Обнаружить, если окно X11 имеет украшения
- 9. X11: ждет, пока не будет видно окно?
- 10. Окно X11 не обновляется до получения события
- 11. Создайте многоуровневое окно на Linux X11/Gtk
- 12. Как сделать X11-окно нескольких мониторов
- 13. С x11 получить окно в координатах
- 14. Отправка команды paste в окно X11
- 15. Как разрешить рабочий поток обновлять окно X11?
- 16. X11: поднять существующее окно через командную строку?
- 17. x11 - как сохранить окно в фиксированном положении
- 18. X11: как заставить окно перемещаться за другим?
- 19. Как создать закругленное окно прямоугольника в X11
- 20. X11: переместить существующее окно через командную строку?
- 21. Пересылка ncurses ключевых событий в окно X11
- 22. Выберите конкретное значение узла из XML
- 23. Выберите конкретное значение JSON строки, используя MySQL
- 24. Python - Выберите конкретное значение из тестового файла
- 25. OData v4 - Выберите конкретное поле в объекте
- 26. Выберите конкретное значение в том же столбце
- 27. Выберите конкретное поле индекса в MongoDB
- 28. Выберите конкретное слово с помощью Javascript?
- 29. CSS выберите конкретное изображение из нескольких изображений
- 30. Выберите конкретное поле вложенного массива HABTM