Oct 26

使用GTK编写中文软件 不指定

bkkkd , 21:17 , 网摘 » 软件应用 , 评论(0) , 引用(0) , 阅读(5024) , Via 本站原创 | |
GTK/GNOME 系列widgets中, 输入和显示已经是国际化了的. 所以用它们编写中文软件十分容易. 把西文软件改写成中文软件也十分容易.



   * 在程序中包含 locale.h

   * 在gtk_init前设置locale: gtk_set_locale()

   * 接着调用 gtk_rc_add_default_file(\"rcfilename\"), 其中rcfilename中 含有缺省的fontset

   * 如果不用资源文件, 则应对widget设置fontset

   * 编译 gcc `gtk-config --cflags` entry.c -o entry `gtk-config --libs`

   * 把文件 gtkrc.zh 拷贝到当前目录下



在 gtk 的 text 组件中如果设置了font, 则不能正常显示中文. 解决的方法是把font释放(unref), 然后使用
gtk_fontset_load 字体集. 对于其它组件也是如此, 有的组件需要先拷贝一个 GtkStyle, 然后按上述方法解决.



下面的程序在显示中文时未使用中文平台, 输入使用的是Chinput中的XIM协议支持 , 输出结

果:}
" onmouseover="
function onmouseover(event) {
   if (this.alt) {
       this.style.cursor = "hand";
   }
}
" onload="
function onload(event) {
   if (this.width > screen.width - 333) {
       this.width = screen.width - 333;
       this.alt = "\u70B9\u51FB\u67E5\u770B\u539F\u56FE\uFF01";
   }
}
" alt="点击查看原图" src="http://www.linuxforum.net/chinese/develop/gtk/gtk.gif" />

//file entry.c

#include  

#include  

int main (int argc, char *argv[])

{

GtkWidget *window;

GtkWidget *vbox;

GtkWidget *entry;

GtkWidget *text;

GtkWidget *button;

gtk_set_locale();

gtk_rc_add_default_file(\"./gtkrc.zh\");

gtk_init (&argc, &argv); /* create a new window */

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

// gtk_widget_set_usize( GTK_WIDGET (window), 200, 500);

gtk_window_set_title(GTK_WINDOW (window), \"GTK Entry\");

gtk_signal_connect(GTK_OBJECT (window), \"delete_event\", (GtkSignalFunc) gtk_exit, NULL);

vbox = gtk_vbox_new (FALSE, 0);

gtk_container_add (GTK_CONTAINER (window), vbox);

gtk_widget_show (vbox); entry = gtk_entry_new_with_max_length (60);

gtk_entry_select_region (GTK_ENTRY (entry), 0, GTK_ENTRY(entry)->text_length);

gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);

gtk_widget_show (entry); text = gtk_text_new (NULL, NULL);

gtk_text_set_editable (GTK_TEXT (text), TRUE);

gtk_box_pack_start (GTK_BOX (vbox), text, TRUE, TRUE, 0);

gtk_widget_show(text); button = gtk_button_new_with_label (\"关闭窗口\");

gtk_signal_connect_object (GTK_OBJECT (button), \"clicked\", GTK_SIGNAL_FUNC(gtk_exit), GTK_OBJECT (window));

gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);

gtk_widget_grab_default (button);

gtk_widget_show (button);

gtk_widget_show(window);

gtk_main();

return(0);

}
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]