c++ - Xlib - 窗口未渲染

标签 c++ x11 xlib xorg

我正在为 Xlib 创建库(如 gtk/qt,但经过简化)。而且我在桌面上看不到窗口。 GDB什么也没说。我必须做什么来修复这个错误?已经尝试将显示声明移至主函数。使用 -g 标志进行编译(用 GDB 检查)。而且没有 window !说真的,这是一个很棒的故障!

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;
}

最佳答案

正如我wrote before ,X11 的功能远不止创建一个窗口、在其上绘制一些线条并期望输出。您必须设置 X 事件循环来接收事件、处理最少的曝光事件,以及以正确的方式处理键盘、鼠标等。所以恐怕这不是一个错误,而是你的程序中的设计缺陷。

有关简短教程,请参阅 here .

关于c++ - Xlib - 窗口未渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32910267/

相关文章:

c++如何正确声明另一个类的友元类方法

c++ - 摆脱错误 C2243

.net - 一个类的字符数组

c - X11透明窗口: click-through only where alpha = 0

c++ - 在 X11 下如何判断你的光标是否指向你的桌面

linux - 你将如何在 Linux 上构建 "pixel perfect"GUI?

c++ - X Window 系统上的顶级窗口

c++ - XOpenDisplay(0) 和 XOpenDisplay(NULL) 有什么区别?

c++ - 如何在 C++ 中初始化对象引用?

c++ - libavdevice 和 x11 的静态链接库应该以什么顺序链接?