LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 954|回复: 5

gtk中文显示问题

[复制链接]
发表于 2004-7-14 14:14:07 | 显示全部楼层 |阅读模式
一个老问题,不过看了前人的贴子,还是不会。


  1. #include <stdio.h>
  2. #include <gtk/gtk.h>

  3. static GtkWidget  *entry;

  4. void
  5. PrintAndExit (GtkWidget *widget,GtkWidget *window)
  6. {
  7.         char    *str;

  8.         str = gtk_entry_get_text(GTK_ENTRY(entry));
  9. //        str = g_locale_to_utf8(str,-1,NULL,NULL,NULL);
  10.         if (str != (char*)NULL)
  11.                 printf(  "%s\n",str);

  12.         gtk_widget_destroy(window);
  13.         gtk_main_quit();
  14. }

  15. void
  16. PrintByeAndExit (GtkWidget *widget,gpointer data)
  17. {
  18.         printf( "Goodbye, world!\n" );
  19.         gtk_exit(0);
  20. }

  21. int
  22. main( int argc, char *argv[])
  23. {
  24.         GtkWidget *window, *label,*vbox,*hbox,*button,*separator;

  25.         gtk_set_locale ();
  26.         gtk_init (&argc,&argv);

  27.         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  28.         gtk_window_set_policy(GTK_WINDOW(window),FALSE,FALSE,FALSE);

  29.         gtk_signal_connect(GTK_OBJECT(window),"destroy",
  30.                         GTK_SIGNAL_FUNC(PrintByeAndExit),NULL);

  31.         gtk_window_set_title (GTK_WINDOW (window), "Hello Gtk+!");
  32.         gtk_container_border_width(GTK_CONTAINER(window),0);

  33.         vbox = gtk_vbox_new (FALSE,0);
  34.         gtk_container_add(GTK_CONTAINER(window),vbox);

  35.         hbox = gtk_hbox_new(FALSE, 0);
  36.         gtk_box_pack_start (GTK_BOX (vbox),hbox,FALSE,FALSE,0);

  37.         label = gtk_label_new( "ENter a message:");
  38.         gtk_box_pack_start (GTK_BOX(hbox),label,FALSE,FALSE,0);
  39.         entry = gtk_entry_new ();
  40.         gtk_entry_set_text (GTK_ENTRY(entry),"");
  41.         gtk_editable_select_region(GTK_EDITABLE (entry),0,-1);
  42.         gtk_box_pack_start (GTK_BOX (hbox),entry,FALSE,FALSE,0);

  43.         separator = gtk_hseparator_new();
  44.         gtk_box_pack_start (GTK_BOX(vbox),separator,FALSE,FALSE,0);

  45.         button = gtk_button_new_with_label ("Print");
  46.         gtk_signal_connect_object (GTK_OBJECT(button),"clicked",
  47.                         GTK_SIGNAL_FUNC(PrintAndExit),GTK_OBJECT(window));
  48.         gtk_box_pack_start (GTK_BOX(vbox),button,FALSE,FALSE,0);
  49.         GTK_WIDGET_SET_FLAGS (button,GTK_CAN_DEFAULT);
  50.         gtk_widget_grab_default (button);

  51.         gtk_widget_show_all(window);

  52.         gtk_main();

  53.         return(0);
  54. }

复制代码
 楼主| 发表于 2004-7-14 14:15:24 | 显示全部楼层
输入英文是可以在控制台正常显示的。
但是中文不行
发表于 2004-7-14 14:48:04 | 显示全部楼层
如果要在控制台下显示中文,需要安装zhcon.
 楼主| 发表于 2004-7-14 15:59:48 | 显示全部楼层
这样啊,那就算了.
谁会在控制台上显示呢?

谢谢
发表于 2004-7-14 21:39:45 | 显示全部楼层
可是你的代码中只是显示英文呀!
gtk2中显示中文要用utf8编码;如果是用printf()、g_print()这样的函数在终端上显示信息,只要该中文终端能支持相应的编码就行了。
发表于 2004-7-16 03:08:07 | 显示全部楼层
void
PrintAndExit (GtkWidget *widget,GtkWidget *window)
{
        char    *str;

        str = gtk_entry_get_text(GTK_ENTRY(entry));
//        str = g_locale_to_utf8(str,-1,NULL,NULL,NULL);
        if (str != (char*)NULL)
                printf(  "%s\n",str);

        gtk_widget_destroy(window);
        gtk_main_quit();
}

如果用g_locale_to_utf8不行..改用下面的..试试
str = g_locale_from_utf8(str,-1,NULL,NULL,NULL);

printf(  "%s\n",str);
不要用printf了..用g_print吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表