2011-11-26 59 views
0

我使用Allegro5 API來創建我的窗口並對其進行管理。它允許我訪問它使用XCreateWindow創建的XWindow在給定XWindow *的情況下在X(* nix)上實現剪貼板功能?

我有權訪問d->窗口,但這就是它。從這裏,有沒有一種方法可以與發送到此窗口的XEvents進行交互?我想實現剪貼板功能。我只是不確定我如何處理XSelection事件。

+0

重新實現小部件是邪(尤其是在X)。圍繞跨平臺API開展特定平臺的事情更多EVGH – BatchyX

+0

argh。星號真的有必要嗎? – JosephH

+0

那麼,如果X是正常的像OSX和Windows我不會有太多:( – jmasterx

回答

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 
+0

他說,他使用Allegro庫創建他的窗口 – BatchyX

+0

@ BatchyX *有沒有一種方法可以與發送到這個窗口的XEvents進行交互?*您顯然沒有閱讀過這些問題。這個答案正好回答了問題 –

+0

有沒有一種方法可以調查事件,以便我可以將它集成到我現有的遊戲循環? – jmasterx