Xlib — окно не рендерится

Я создаю библиотеку для Xlib (как gtk / qt, но упрощенно). И я не вижу окна на моем рабочем столе. ГБД ничего не говорит. Что я должен сделать, чтобы исправить эту ошибку? Уже пытался переместить объявление отображения в основную функцию. Использовал флаг -g при компиляции (для проверки с помощью GDB). И нет окна! Серьезно, это потрясающий глюк!

Библиотека FXL ++:

#include <iostream>
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
using namespace std;

class fxlpp{
public:
void init(){
disp = XOpenDisplay(NULL);

if(disp == NULL){ //error 1 if can't open display
cerr << "Can't open display" << endl;
exit(1);
}

screen = DefaultScreen(disp);
}
void mkWin(int winID, int x1, int y1, unsigned x2, unsigned y2){
win[winID] = XCreateSimpleWindow(disp, RootWindow(disp, screen), x1, y1, x2, y2, 0, BlackPixel(disp, screen), WhitePixel(disp, screen));
XSelectInput(disp, win[winID], ExposureMask | KeyPressMask);
XMapWindow(disp, win[winID]);
}
void mkCWin(int cWinID, int pWinID, int x1, int y1, int x2, int y2){
cWin[pWinID][cWinID] = XCreateSimpleWindow(disp, win[pWinID], x1, y1, x2, y2, 1, BlackPixel(disp, screen), WhitePixel(disp, screen));
XSelectInput(disp, cWin[pWinID][cWinID], ExposureMask | KeyPressMask);
XMapWindow(disp, cWin[pWinID][cWinID]);
}

protected:
Display *disp; //declare display pointer
int screen; //declare display num integer
Window win[129]; //declare window
Window cWin[129][129]; //declare child win array
XEvent event; //declare event handler
};

Код для тестирования библиотеки:

#include <iostream>
#include "fxlpp.hpp"using namespace std;

int main(){
class fxlpp fxlpp;
fxlpp.init();
fxlpp.mkWin(1, 100, 100, 500, 300);
sleep(2);
return 0;
}

2

Решение

Насколько я писал раньше, X11 — это намного больше, чем просто создать окно, нарисовать на нем несколько строк и ожидать результата. Вы должны настроить цикл событий X, чтобы получать события, обрабатывать события минимальной экспозиции, а также клавиатуру, мышь и т. Д. Надлежащим образом. Поэтому я боюсь, что это не ошибка, это недостаток дизайна в вашей программе.

Для краткого руководства, см. Вот.

0

Другие решения

Хотя цикл обработки событий важен в большинстве случаев, в этом простом случае вам просто нужно вызвать XFlush() после рисования.

0

По вопросам рекламы [email protected]