汉字输入服务器(Hanzi Input Server) API
 

★初始化

使用汉字输入服务器Chinput1.0前, 用户必须调用 HZclientInit() 进行初始化. 它的主要用途是注册原子(Atom). 当 服务器起动后, 便不能再起动相同的服务器. 


void HZclientInit(dpy)

参数调用: Display *dpy; /* X server display */
返回值: None

有下列原子被该函数注册:
hz_protocol_atom /* marking the server */
hz_input_atom /* client send */
hz_output_atom /* server send */
hz_query_atom /* query information */
hz_reply_atom /* answering information */
hz_config_atom /* configure server */

★获取服务器信息

有时客户程序必须获取并核对服务器的有关信息, 目前客户程序可以访问 如下信息: 协议, 版本, 编码, 状态. 



int HZqueryServer(dpy, win, type, str)

参数调用 Display *dpy;
Window win; /* 客户窗口ID */
int type; 
(type 定义在 hzclient.h 中, 为
HZCLIENT_QUERY_PROTOCOL 0
HZCLIENT_QUERY_VERSION 1
HZCLIENT_QUERY_ENCODING 2
HZCLIENT_QUERY_STATUS 3
返回
char *str;
函数值: 0 (服务器未起动), 1: 正常

★向服务器输送按键信息

用户按键信息(KeyPress, KeyRelease)都可以送到服务器, 由服务器处理. 然后等待服务器的回送. 这样就涉及到两个问题, 一是如果服务器未起动或 在使用过程中死掉怎么办? 二是如果用户需要特殊按键如: Escape, Delete, Home, End, 箭头键等怎么办?

本函数巧妙地解决了上述两个问题. 函数首先检查服务器是否存在, 如存在, 则把按键送给服务器, 否则, 把按键信息以客户信息(ClientMessage)的形式 送给自己. 这样, 用户只需要处理ClientMessage即可.

解决第二个问题的方法是, 对服务器不起作用的按键返送给客户程序. 如用户 按了删除键或空格键, 它们既对服务器有重要作用, 又对客户程序有重要意义, 删除键通常用来编辑用户的输入区, 空格键用作首字输入. 但当它们不对服务 器不起作用时, 如用户的输入区删除干净或联想输入内容已尽, 服务器则把 按键和按键状态(如是否当时有Control, Shift键按下)返还给客户程序.


int HZsendKey(dpy, win, eve)

参数调用 Display *dpy;
Window win; /* 客户窗口 ID */
XKeyEvent *eve;
返回 OK

当然, 用户还可以首先过滤键然后决定送出与否. 
★接收服务器的汉字转换

当用户发现有ClientMessage时, 可以调用下列函数处理 

int HZprocInput(ev, number, keycode, keystate, str)


参数调用 XClientMessageEvent *ev;
返回 int *number; /* key number */
unsigned int *keycode; /* keysym */
unsigned int *keystate; /* keystate */
char *str; /* hanzi, if any */
函数值为
HZSERVER_OUTPUT_NORMAL_KEY 0
HZSERVER_OUTPUT_FUNCTION_KEY 1
HZSERVER_OUTPUT_HANZI 2
HZSERVER_OUTPUT_BAD -1
-1: 错误
0: 正常按键(此时keycode有意义)
1: 特殊按键(此时keycode 和keystate有意义)
2: 汉字(只有此时str才有意义)

★设置服务器属性

虽然服务器的属性几乎可以全部由热键设定, 但是提供对 客户程序提供设置函数更为方便 

HZconfigServer(dpy, win, flag, n1, n2, n3)

参数调用: Display *dpy;
Window win; /* 客户窗口ID */
int flag;
指定设置种类
HZCLIENT_CONFIG_DEFAULTCOLOR 0
HZCLIENT_CONFIG_DIMCOLOR 1
HZCLIENT_CONFIG_LIGHTCOLOR 2
HZCLIENT_CONFIG_PANELCOLOR 3
HZCLIENT_CONFIG_TEXTCOLOR 4
HZCLIENT_CONFIG_HZFONT 5
HZCLIENT_CONFIG_FONT 6
HZCLIENT_CONFIG_INMETHOD 7 
HZCLIENT_CONFIG_ENCODING 8 No
HZCLIENT_CONFIG_DICTIONARY 9 No
HZCLIENT_CONFIG_ASSOCIATION 10 No

int n1, n2, n3;
放置设置参数
如果设置颜色, 则放置三元色值(0-255),
如设置输入方法, 仅仅把输入方法号码放置在
n1中, 如设置成为系统缺省颜色系列, 则毋须
设置此三参数(不用的参数可置零).
返回 OK



作者:于明俭 中国科学院高能物理研究所计算中心

©Tcl/Tk中文网 2003-2008
ALL RIGHTS RESERVED