📄 00000001.htm
字号:
目前我只有看过 Xlib, 对於 其他 Widget 还没有深入研究,因此我 <BR> <BR> 只能对 Xlib 的部分稍作说明。而这类的参考 资料,有兴趣的朋友可 <BR> <BR> 以找 <BR> <BR> <BR> The Definitive Guides to the X Window System <BR> <BR> <BR> 这一系列的书来看,出版商是 O'Reilly & Associates Inc. ,其中 <BR> <BR> 有两本 <BR> <BR> <BR> 1.Volume One, Xlib Programming Manual (for Version 11) <BR> <BR> <BR> Author: Adrian Nye <BR> <BR> 2.R6 Update for the R5 Editions of vols. 1, 2, 4, & 5 <BR> <BR> Programmer's Supplement for Release 6 of the X Window <BR> <BR> System. <BR> <BR> <BR> Author: Adrian Nye <BR> <BR> <BR> 在 I18N 方面有详尽的资料,很值得参考。或者是可以看看 XFree86 <BR> <BR> 内附的 .ps 文 件 (如果您有安装的话,应该在 <BR> <BR> /usr/X11R6/lib/X11/doc □头)。 <BR> <BR> <BR> 1.第一步 (详见 man XSupportsLocale): <BR> <BR> <BR> 除了 setlocale() 之外,您还要呼叫 XSupportsLocale() 来确 <BR> <BR> 定 X Window 对您 目前的 locale 是否有支援。另外,您还要呼 <BR> <BR> 叫 XSetLocaleModifiers() 来设定 一些 X-modifier 的值,□ <BR> <BR> 例如下: <BR> <BR> <BR> <BR> #include <BR> <BR> #include <BR> <BR> #include <BR> <BR> <BR> main() <BR> <BR> { <BR> <BR> setlocale(LC_CTYPE, ""); <BR> <BR> if (XSupportsLocale() != True) { <BR> <BR> printf("error X locale setting\n"); <BR> <BR> exit(0); <BR> <BR> } <BR> <BR> XSetLocaleModifiers(""); <BR> <BR> } <BR> <BR> <BR> <BR> 在此我们用 X11/Xlocale.h 来取代原来的 locale.h, 这是 <BR> <BR> "Xlib programming manual" 书中建议的,在其备完整 locale <BR> <BR> 支援的 libc 环境下,它其实是等价 於 include , 但若在其他 <BR> <BR> 环境, Xlocale.h 会用 XLOCALE 机制来 取代原有的机制。 <BR> <BR> <BR> 上头的 XSetLocaleModifiers 会存环境变数 XMODIFIERS 中取得 <BR> <BR> X-modifier 的值并加以设定之。 XMODIFIERS 的格式为: <BR> <BR> <BR> export XMODIFIERS='@category=value' <BR> <BR> <BR> 目前 category 只有 "im" 有用,如 "@im=xcin-cxims", 意指设 <BR> <BR> 定 xcin-cxims 作为此 X Window 程式的 XIM server。 <BR> <BR> <BR> 2.设定 fontset (详见 man XCreateFontSet): <BR> <BR> <BR> 以往 X Window 程式都是呼叫 XLoadQueryFont() 之类的函式来 <BR> <BR> 载入并使用字型。 但在 Xi18n 的架构下,一个 locale 的 <BR> <BR> encoding 通常不能光用一种字型来表示。 例如我们的 <BR> <BR> zh_TW.Big5, 半形字需用英文字型 (如 -*-iso8859-1),而全形 <BR> <BR> 字需 用中文字型 (如 -twmoe-*-big5-0), 因此,我们不能用 <BR> <BR> XLoadQueryFont() 将这 些字型分别载入,而要用 <BR> <BR> XCreateFontSet() 来载入所需的 fontset。 <BR> <BR> <BR> <BR> <BR> Display *display; <BR> <BR> XFontSet fontset; <BR> <BR> char *fontset_name, **missing_charset, *def_string; <BR> <BR> int missing_charset_count; <BR> <BR> <BR> fontset_name = "-*-iso8859-1,-twmoe-*-big5-0"; <BR> <BR> fontset = XCreateFontSet(display, fontset_name, <BR> <BR> &missing_charset_list, &missing_charset_count, &def_stri <BR>ng); <BR> <BR> <BR> <BR> <BR> 在这□我们可以将 fontset 看成一个「字型物件」,而不要把它 <BR> <BR> 看成 "-*-iso8859-1" 与 "-twmoe-*-big5-0" 这两种字型的组 <BR> <BR> 合。当我们要画任何字 串时,我们不用担心要画的到底是全型字 <BR> <BR> 或半型字,使用 fontset 便能帮我们 处理一切。 <BR> <BR> <BR> 3.画出字串 (详见 man XwcDrawImageString, man <BR> <BR> XmbDrawImageString, manXOpenOM) <BR> <BR> <BR> 平常我们要在视窗画字串时,都会用 XDrawImageString() 等函 <BR> <BR> 式,或者用 XDrawImageString16() 来画双位元的字串 (即全型 <BR> <BR> 字)。现在可以我们用 XwcDrawImageString (用来画 wide-char <BR> <BR> (wchar_t *) 字串) 或 XmbDrawImageString (用来画 <BR> <BR> multi-byte (char *) 字串) 。不管您输入的字 串是全型或半 <BR> <BR> 型,或二者的混合,使用者两个函式都能正确处理,同时会根据 <BR> <BR> 您的 fontset 的设定来画字。 <BR> <BR> <BR> 除此之外, X11R6 还有一个 Output Method 机制,用来做多国 <BR> <BR> 语系字串输出 (画字串),我们可以在程式中呼叫 XOpenOM() 来 <BR> <BR> 开启一个 Output Method 。 但这部分我还没有仔细研究,有兴 <BR> <BR> 趣的朋友可以参考本章开头所列的参考资料 以获得进一步资讯。 <BR> <BR> <BR> 4.XIM (详见 man XOpenIM) <BR> <BR> <BR> XIM 应分两方面来谈,一是 XIM server, 另一是 XIM client。 <BR> <BR> 对 XIM client 而言,如同 Output Method 一般,我们可以在程 <BR> <BR> 式中呼叫 XOpenIM() 来开启一 个 Input Method, 同时指定 XIM <BR> <BR> server 的名字。但这部分我还没有仔细研究, 有兴趣的朋友可 <BR> <BR> 以参考本章开头所列的参考资料。 <BR> <BR> <BR> 我目前是在写 XIM server 的部分,但我没有直接拿 X Window <BR> <BR> 的函式来写,而 是拿 IMdkit lib 来写,以简化整个程式写作。 <BR> <BR> 在此我不多作说明了,有兴趣的 朋友可以抓取: <BR> <BR> <BR> xcin-2.5-19990218.tar.gz <BR> <BR> <BR> 回去看,□头的 doc/programming/ 目录中有对此稍作说明,同 <BR> <BR> 时 IMdkit 的 source 也整个附在 xcin-2.5 source 中。 <BR> <BR> <BR> <BR> 以上资料,仅供参考,欢迎大家指教。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -