我使用Allegro5 API來創建我的窗口並對其進行管理。它允許我訪問它使用XCreateWindow創建的XWindow在給定XWindow *的情況下在X(* nix)上實現剪貼板功能?
我有權訪問d->窗口,但這就是它。從這裏,有沒有一種方法可以與發送到此窗口的XEvents進行交互?我想實現剪貼板功能。我只是不確定我如何處理XSelection事件。
我使用Allegro5 API來創建我的窗口並對其進行管理。它允許我訪問它使用XCreateWindow創建的XWindow在給定XWindow *的情況下在X(* nix)上實現剪貼板功能?
我有權訪問d->窗口,但這就是它。從這裏,有沒有一種方法可以與發送到此窗口的XEvents進行交互?我想實現剪貼板功能。我只是不確定我如何處理XSelection事件。
您需要創建the xevent loop,並處理特定的xevents。 Here是一個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
重新實現小部件是邪(尤其是在X)。圍繞跨平臺API開展特定平臺的事情更多EVGH – BatchyX
argh。星號真的有必要嗎? – JosephH
那麼,如果X是正常的像OSX和Windows我不會有太多:( – jmasterx