+ -
当前位置:首页 → 问答吧 → 设置GdkFont的问题 懂GTK+的高手来帮我

设置GdkFont的问题 懂GTK+的高手来帮我

时间:2008-05-16

来源:互联网

我想在程序中画出一些图案 ,需要把文字也画出来
我使用
GdkFont *font;
font=gdk_font_load ( "-adobe-helvetica-medium-r-normal--17-*-*-*-*-*-iso8859-1" );

gdk_draw_text ( widget->window, font, gc, m-3, n+15, str, strlen ( str ) );;
这样 可以实现 可惜不能显示中文,是乱码。

我的问题是 gdk_font_load()如何创建为中文字体啊
另外,字体大小怎么设啊? 我把17改为14可以,其他的取值是错误的

高手帮忙

作者: zuopai   发布时间: 2008-05-16

转一篇文章,当初我也碰到过这样的问题:

GTK+ 中文显示解决方案

有关GTK+在界面显示中文的问题,常常在Linux和使用GTK的Win32的开发人员心中隐隐作痛。不过,人类是聪明的。中国人有上下5000年的悠久的血统。所以,我们是聪明的。所以,对于中文显示也有很多对策。最常见的是IBM网站上用的gettext不过。我试过,至少在Win32下不行。所以,查了很多的资料。请教了很多Linux公社的人。现在有了很好的解决方式。

首先,GTK+不是不支持中文,而是必须使用UTF-8的编码来显示中文。而我们平时在国内使用的是GB码。所以,由于编码不同才会造成乱码的。既然是这样,所以问题也就迎刃而解了。我们只要在编译的时候将中文转换成UTF-8再传给GTK显示就可以了。

接着我们就要考虑如何实现了。在Linux公社有关这个解决方式的一种是将代码转换成UTF-8在用gcc编译。可是,我在win32下尝试过了。用mingw32编译失败。那么我们就用函数来实现吧。

最后我们就来看看该函数。

g_locale_to_utf8()

这个函数是GTK将系统默认编码转换成UTF-8的一个函数。

但是,这个函数每次调用都要传入 5 个参数。太多又麻烦。所以,接见gettext的一些方式。使用_作为函数名来显示中文。函数定义如下。


char *_(char *c)
{
  return(g_locale_to_utf8(c,-1,0,0,0));


如果需要调用就用 _("中文")就可以了。

好了,这个方式在Redhat Linux 9和 Windows XP下测试都成功了。

作者: geldqb   发布时间: 2008-05-16

其他的是不是没相应的字库

作者: dxing_1983   发布时间: 2008-05-16

使用1楼的方法 还是乱码

作者: zuopai   发布时间: 2008-05-16

考虑用别的字库试试看吧.

作者: geldqb   发布时间: 2008-05-16

我就根本不知道 -adobe-helvetica-medium-r-normal--17-*-*-*-*-*-iso8859-1
这串字符怎么来的
要知道这个就好了

作者: zuopai   发布时间: 2008-05-16

帮你再找找看吧:

1.不要用 GDK 的一些函数更改字体,因为那是 GTK+的不稳定
因素之一(至少在2.0以下版本中是这样的)。
2.为了获得更多的字体,应该避免使用 GdkFont类型,及相关
函数,取而代之的是 Pango 库,这是 GTK+ 的一部分。
3.GdkFont 只能使用 XFont 字体,而且使用方法相对复杂,
PangoFontDescription 可以使用 XFont,以及一些本地字体,
包括 Win Font, XRender Font, TrueType Font,所以您没有必
要再留恋 GdkFont 了。
4.您不需要修改所有控件,更简便的方法是在主窗口创建后立
即修改它的字体,将来创建的控件会继承它的这项属性。
例如:
window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
{
GtkStyle *style = gtk_rc_get_style( window );
pango_font_description_set_family(
style->font_desc, "Stsong" );
gtk_widget_set_style( window, style );
}
( 这三句代码是将程序的字体设置为 "华文宋体" )

作者: geldqb   发布时间: 2008-05-16

Gtk中现在一般使用cairo图形库来绘制图形,效率高些,也简单
我也在一个图像上绘制过字体和图像,CAIRO画的东西一般柔些

//show text with black color and on (0,0)
void show_text_simple(GdkDrawable *drawable, char *text)
{
cairo_t *cr;
PangoLayout *layout;
PangoFontDescription *desc;

cr = gdk_cairo_create(drawable);
layout = pango_cairo_create_layout(cr);

pango_layout_set_text(layout, text, -1);
desc = pango_font_description_from_string("Sans Bold 10");
pango_layout_set_font_description(layout, desc);
pango_font_description_free(desc);

  pango_cairo_update_layout(cr, layout);
  pango_cairo_show_layout(cr, layout);

cairo_destroy(cr);
}

如果只是画图案,还是建议你用cairo库,这个是很好用的,也不难,
http://cairographics.org/samples/ 
上面是CAIRO的事例


作者: chenzhixin   发布时间: 2008-05-19

呵呵,蛋.

作者: marka945   发布时间: 2008-05-19

1 楼的方法行啊!
试过了!

作者: xpsair   发布时间: 2011-08-23

热门下载

更多