zoukankan      html  css  js  c++  java
  • 使用GTK编写中文软件

    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协议支持 , 输出结果:

    //file entry.c #include <locale.h> #include <gtk/gtk.h> 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); }
  • 相关阅读:
    单例模式的七种写法
    Android省电开发 浅析
    android省电开发之cpu降频
    什么是签名、为什么要给应用程序签名、如何给应用程序签名
    内存溢出和内存泄漏的区别、产生原因以及解决方案
    Android Studio 使用GitHub
    sharesdk 的使用
    当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?
    laravel安装笔记
    erlang的一些小技巧(不定期更新)
  • 原文地址:https://www.cnblogs.com/cy163/p/786572.html
Copyright © 2011-2022 走看看