给定XWindow *,在X(* nix)上实现剪贴板功能?

时间:2011-11-26 19:44:36

标签: c++ c linux clipboard

我正在使用Allegro5 API来创建我的窗口并对其进行管理。它允许我访问它使用XCreateWindow

创建的XWindow

我可以访问d->窗口,但这就是它。从这里,有没有办法可以与发送到此窗口的XEvents交互?我想实现剪贴板功能。我只是不确定如何处理XSelection事件。

1 个答案:

答案 0 :(得分:0)

您需要创建the xevent loop,并处理特定的xeventsHere是一个xlib hello world示例,这就是你可以做到的。

该示例是从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