📄 2.cpp
字号:
#include <X11/Xlib.h>#include <X11/Xutil.h>#include <X11/Xos.h>#include <X11/Xatom.h>#define DUMP_ERR printfstatic void draw(Display *display,Window win,GC gc,int width,int height);int main(){Display *display;int screennum;int width;int height;Atom protocols;const char *strdraw = “hello world”;Window win;GC gc;display = XOpenDisplay(NULL);if( !display ){DUMP_ERR(”call XOpenDisplay(%s) fail\n”,XDisplayName(NULL));return 1;}// get default screenscreennum = DefaultScreen(display);width = DisplayWidth(display,screennum)/2;height = DisplayHeight(display,screennum)/2;// create windowwin = XCreateSimpleWindow(display,RootWindow(display,screennum),0,0,width,height,3,BlackPixel(display,screennum),WhitePixel(display,screennum));//增加这个代码是捕获程序退出事件protocols = XInternAtom(display, “WM_DELETE_WINDOW”, True);XSetWMProtocols(display, win, &protocols, 1);// select eventXSelectInput(display,win,ExposureMask|KeyPressMask|ButtonPressMask|StructureNotifyMask);// create gc{unsigned long valuemask = 0;XGCValues values;gc = XCreateGC(display,win,valuemask,&values);}// show windowXMapWindow(display,win);// event loopwhile(1){XEvent event;XNextEvent(display,&event);switch(event.type){case Expose: // expose windowif( event.xexpose.count != 0) break;draw(display,win,gc,width,height);//XDrawString(display,win,gc,10,10,//strdraw,strlen(strdraw));break;case ConfigureNotify: // when the window’s size changewidth = event.xconfigure.width;height = event.xconfigure.height;break;case ClientMessage :if(event.xclient.data.l[0] == protocols){DUMP_ERR(”recv destroy notify\n”);XFreeGC(display,gc);XDestroyWindow(display, win);XCloseDisplay(display);}return 0;default:break;}}}// 使用changeGC修改属性的代码 只有valuemask被设置的属性才会根据XCGValues里面的值进行修改static void set_gc_values(Di
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -