VC2005使用GTK+(5)

1. GTK+界面中显示中文的问题
    开始怀疑是字符集的问题。因为在gtk中默认是使用的UTF-8字符集。因此只要字符

串转换成UTF-8就可以显示了吧。
    于是尝试转换,使用了3中方法:
    1,使用windows的API WideCharToMultiByte
char szName[100];
int dwMinSize = WideCharToMultiByte(CP_UTF8,NULL,L"呵呵,-1,NULL,0,NULL,FALSE);
WideCharToMultiByte(CP_UTF8,0,L"呵呵,-1,szName,dwMinSize,0,0);
    2,使用了iconv转换库
    3,使用g_local_to_utf8
    g_locale_to_utf8("呵呵",10,NULL,NULL,NULL);
这三种方法都试过了,在绘图区域始终没法显示中文,奇怪的是在标题栏是可以显示中文的

:gdk_draw_text(pixmap,font,widget->style->black_gc,0,100,g_locale_to_utf8("呵

呵",10,NULL,NULL,NULL),10); 失败

gtk_window_set_title(GTK_WINDOW(window1),g_locale_to_utf8("呵

呵",10,NULL,NULL,NULL));就成功了
这个问题困扰了好久。

2. 针对这两个函数的调用,唯一能够引起这个问题的就是font了,难道是字体选择的不支持

中文吗?
    代码如下:
    GdkFont *font = NULL;
     font = gdk_font_load("simsun 20");
    gdk_draw_text(pixmap,font,widget->style->black_gc,0,100,g_locale_to_utf8

("呵呵1234",10,NULL,NULL,NULL),10);
    显示出来的结果是:只有1234,而“呵呵”没有显示。
    simsun字体肯定是支持中文的,因此问题陷入了僵局。

3. 因此跟同事和朋友交流
    有人提出了一下的解决方案:
    1 ,字体不应该load出来,而应该用fontset得到font。代码可以如下:
char *fontset = "-adobe-helvetica-medium-r-normal--16-*-*-*-*-*-iso8859-1, /
        -studio-song-medium-r-normal--16-*-*-*-*-*-gb2312.1980-0";   

GdkFont *font;
font = gdk_fontset_load (fontset);
gdk_draw_text(pixmap,font,widget->style->black_gc,0,100,g_locale_to_utf8("呵呵

1234",10,NULL,NULL,NULL),10);这样仍然不可以。
    2, 在1的基础上
    char str[]="呵呵1234";
     for(int i=0;i<4;i++)
     {
         str[i] -= 0200;
     }
    gdk_draw_string(pixmap,font,widget->style->black_gc,0,100,str);
这样也不行
    3, 修改文件的字符集
    由于目前是在VC下写的代码:选择文件---高级保存---Unicode(UTF-8 无签名)-代

码页 65001

4.针对这些方案修改工程,发现1,3配合起来可以达到显示汉字的需求。如果排除1,而用
GdkFont *font = NULL;
font = gdk_font_load("simsun 20");
也无法显示,看来1是非常必须的,至于为什么,目前由于刚接触GTK还不太明白这里边的字

体的机制。

你可能感兴趣的:(VC2005使用GTK+(5))