📄 3.cpp
字号:
#include <stdio.h> #include <locale.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xos.h> #include <X11/Xatom.h> #define DUMP_ERR printf static void draw(Display *display,Window win,XFontSet fontset,GC gc); int main() { Display *display; int screennum; int width; int height; Atom protocols; int i; const char *strdraw = “hello world”; Window win; GC gc; XFontSet fontset; // set the locale const char *curlocale =setlocale(LC_ALL,”"); if( curlocale == NULL){ DUMP_ERR(”set locale fail\n”); return 1; } DUMP_ERR(”locale is:%s\n”,curlocale); if(!XSupportsLocale()){ DUMP_ERR(”X don’t support current locale\n”); return 1; } // open display for X display = XOpenDisplay(NULL); if( !display ){ DUMP_ERR(”call XOpenDisplay(%s) fail\n”,XDisplayName(NULL)); return 1; } // get default screen screennum = DefaultScreen(display); width = DisplayWidth(display,screennum)/2; height = DisplayHeight(display,screennum)/2; // get the fontset { char **missing_charset_list_return; int missing_charset_count_return; char *def_string_return; fontset = XCreateFontSet(display,”8x16,-*-gb2312.1980-0″, &missing_charset_list_return, &missing_charset_count_return, &def_string_return); if(missing_charset_count_return > 0){ for(i=0;i<missing_charset_count_return;i++){ DUMP_ERR(”fontset(%s) missing\n”, missing_charset_list_return[i]); } DUMP_ERR(”def string(%s)\n”,def_string_return); XFreeStringList(missing_charset_list_return); XCloseDisplay(display); return 1; } } // create window win = 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 event XSelectInput(display,win, ExposureMask|KeyPressMask |ButtonPressMask|StructureNotifyMask); // create gc { unsigned long valuemask = 0; XGCValues values; gc = XCreateGC(display,win,valuemask,&values); } // show window XMapWindow(display,win); // event loop while(1){ XEvent event; XNextEvent(display,&event); switch(event.type){ case Expose: // expose window if( event.xexpose.count != 0) break; draw(display,win,fontset,gc); //XDrawString(display,win,gc,10,10, //strdraw,strlen(strdraw)); break; case ConfigureNotify: // when the window’s size change width = event.xconfigure.width; height = event.xconfigure.height; break; case ClientMessage : if(event.xclient.data.l[0] == protocols){ DUMP_ERR(”recv destroy notify\n”); XFreeFontSet(display,fontset); XFreeGC(display,gc); XDestroyWindow(display, win); XCloseDisplay(display); } return 0; default: break; } } } static void draw(Display *display,Window win,XFontSet fontset,GC gc) { const char* pout = “Helo 你好 ,这是中文显示 i使用mb与wc两种输出”; wchar_t wbuf[256]; int wlen = mbstowcs(wbuf,pout,strlen(pout)); XmbDrawString(display,win,fontset,gc,10,10,pout,strlen(pout)); XwcDrawString(display,win,fontset,gc,10,50,wbuf,wlen); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -