设置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
作者: zuopai 发布时间: 2008-05-16
作者: geldqb 发布时间: 2008-05-16
这串字符怎么来的
要知道这个就好了
作者: 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
我也在一个图像上绘制过字体和图像,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
试过了!
作者: xpsair 发布时间: 2011-08-23
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28