直接使用X11输出字符串总结

XDrawString和XDrawString16是X11最原始的两个字符串输出函数。

这几个函数输出之前需要使用XLoadQueryFont加载字体,然后使用XSetFont设置当前字体。

XDrawString只能输出8位字符串,如iso8859-1;XDrawString16可以输出16位字符串,如gb2312.80-0、iso10646-1。其中gb2312.80-0就是GB2312,但要求将每个字节-0x80或&0x7F;iso10646-1就是Unicode BMP (UCS-2),但要求转换为大端序。

XmbDrawString、XwcDrawString是X11R5增加的两个使用本地编码输出多语言字符串的函数,Xutf8DrawString是X11R7增加的使用UTF-8编码输出多语言字符串的函数,底层应该就是使用上面两个函数输出的。

这几个函数依赖于区域设置,需要先setlocale(LC_ALL, "")让C运行库获取本地区域设置,然后使用XSupportsLocale()让X11库检查区域设置是否支持,再使用XSetLocaleModifiers("")让X11库读取XMODIFIERS环境变量,再使用XCreateFontSet创建一个XFontSet,在输出字符串时传入这个XFontSet即可。

除了XDrawString系列函数之外之外还有XDrawImageString、XDrawText系列函数。XDrawImageString系列函数输出字符串的同时会填充背景,XDrawText系列函数可以调节多段字符串之间的空白大小和字体。

这几个函数都是在XServer端渲染字体,但是在XServer端渲染字体很难保证需要的字体存在和渲染质量,事实上不同的系统XServer安装的字体并不统一,渲染质量也很差,所以现在的X11程序很少使用这几个函数。现在的X11程序一般使用第三方库在本地渲染字体。

第三方图形库推荐使用cairo,cairo是GTK使用的图形库,支持C语言,可以单独配合X11使用。

发布了29 篇原创文章 · 获赞 1 · 访问量 3404

猜你喜欢

转载自blog.csdn.net/defrag257/article/details/103567841