2013-05-30 8 views
1

Я учусь программировать X окна и попробовать демонстрационную программу здесь:X окно всегда пустой

http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/simple-drawing.c

который один пример кода базовой графики Программирование с помощью Xlib библиотеки; Ссылка на этот учебник http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html

Проблема в том, что демонстрация выше всегда пуста на моем компьютере. Программа должна показывать некоторые основные фигуры на экране, но на моем компьютере окно просто полностью белое. Я использую Ubuntu 13.04.I компилирую код выше gcc simple-drawing.c -o draw -lX11

Другой вопрос о Xcreatewindow(): Я указываю начало XCreatewindow (display, parent, x, y, width, height, border_width, depth, class, visual, valuemask, attributes), установив x = 200, y = 200, но окно по-прежнему отображается в верхнем левом углу моего монитора. Что означают х и у в XCreatewindow()?

+0

О вашем втором вопросе: см. [Это] (http://stackoverflow.com/a/12466016/775806). –

+0

Возможно, вам захочется немного ускориться и попробовать демонстрацию «событий» с того же сайта. Если это работает, попробуйте адаптировать свой код перекраски к другим демонстрационным файлам. Упрощенный подход большинства учебников X11 «давайте несколько раз рисуем несколько снимков и расскажем о событиях», возможно, не работает в современных средах, и в любом случае он никогда не был хорошим, поэтому вы можете просто пропустить этот этап. –

ответ

1

Это та же проблема, как this one

По какой-то причине XFlush и XSync не действуют, как и следовало ожидать.

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

/* allocate a new GC (graphics context) for drawing in the window. */ 
    gc = create_gc(display, win, 0); 
    XSync(display, False); 

в главной добавить

/* catch expose events */ 
    XSelectInput(display, win, ExposureMask); 

    /* wait for the expose event */ 
    XEvent ev; 
    XNextEvent(display, &ev); 

Для другого вопроса, Х и Y в создании окна являются отправной координаты левой верхней части экрана (происхождение), а не где находится окно, которое определяется диспетчером окон.

Смежные вопросы