我正在使用Allegro5 API创建并管理窗口。它允许我访问使用XCreateWindow创建的XWindow

我可以访问d-> window,但是仅此而已。由此,我是否可以与发送到此窗口的XEvent进行交互?我想实现剪贴板功能。我只是不确定如何处理XSelection事件。

最佳答案

您需要创建the xevent loop,并处理特定的xeventsHere是一个xlib hello世界示例,这就是您可以执行的操作。

该示例是从here复制的:

 #include<X11/Xlib.h>
 #include<stdio.h>
 #include<stdlib.h>

 int main()
 {
    Display *dpy;
    Window rootwin;
    Window win;
    Colormap cmap;
    XEvent e;
    int scr;
    GC gc;


    if(!(dpy=XOpenDisplay(NULL))) {
        fprintf(stderr, "ERROR: could not open display\n");
        exit(1);
    }

    scr = DefaultScreen(dpy);
    rootwin = RootWindow(dpy, scr);
    cmap = DefaultColormap(dpy, scr);


    win=XCreateSimpleWindow(dpy, rootwin, 1, 1, 100, 50, 0,
            BlackPixel(dpy, scr), BlackPixel(dpy, scr));

    XStoreName(dpy, win, "hello");


    gc=XCreateGC(dpy, win, 0, NULL);
    XSetForeground(dpy, gc, WhitePixel(dpy, scr));

    XSelectInput(dpy, win, ExposureMask|ButtonPressMask);

    XMapWindow(dpy, win);

    while(1) {
        XNextEvent(dpy, &e);
        if(e.type==Expose && e.xexpose.count<1)
            XDrawString(dpy, win, gc, 10, 10, "Hello World!", 12);
        else if(e.type==ButtonPress) break;
    }

    XCloseDisplay(dpy);
 }


要构建,创建一个Makefile:

all: hello

hello: hello.o
    cc -o hello -Wall -L/usr/X11R6/lib -lX11 hello.o

hello.o: hello.c
    cc -o hello.o -Wall -I/usr/X11R6/include -c hello.c

关于c++ - 给定XWindow *在X(* nix)上实现剪贴板功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8281081/

10-11 23:18