用过之后,你将会发现GTK里的label控件比windows系统的label功能强大很多,很多.
与此同时,使用起来感觉也麻烦很多.
首先,在hello world的基础上添加一点代码.
这里,添加了一个GtkWidget变量 *lblTest;
就是我们的label.
然后lblTest = gtk_label_new("label for test!");
这里就相当于Windows编程中的create,创建了一个TLabel,当然这里是GtkLabel.参数就是lable的Caption
然后gtk_container_add(GTK_CONTAINER(frmMain), lblTest);
这里相当于Windows编程中的setparent,将这个label置于一个交窗口中,否则它不知道应该显示在哪里.
最后多了一行gtk_widget_show(lblTest);
与gtk_widget_show (frmMain);一样,相当于WIndows中的setVisible(*,TRUE);有了此句,才会显示出此控件.
*排版;
1.长度.
这里的label控件大多没有类似vc,delphi中setwidth,setheight的方法.
甚至Label这里基本没有width,height这个属性。
要改变宽度只有一个方法gtk_label_set_width_chars(GTK_LABEL(lblTest), 20);
设定label可以显示多少个字符,从而调整label的长度.
如果你做过java,则不用急于了解这些,因为gtk的排版与java类似,后面会有介绍.
2.对齐.
对齐的方法应该是gtk_label_set_justify(GTK_LABEL(lblTest), GTK_JUSTIFY_LEFT);
但我试了一下不起作用,这里介绍一个更强大的对齐方法.
gtk_misc_set_alignment(GTK_MISC(lblTest), 1, 0);
第一个参数是lblTest,第二个参数是左右方向的对齐值,第三个参数是上下方向的对齐值;
对齐值的取值范围为0-1.取0时,为左对齐,取1时,为右对齐,取0.5时,为中间对齐.
当然,你也可以取0.3,0.8试一下.这可是我从来没见过的对齐方式.
*其它属性;
1.可选.
windows中标准label是不可以做任何操作的,这里可以给label做一个可选设定,用户可以用鼠标选择并进行复制等操作.
gtk_label_set_selectable (GTK_LABEL(lblTest), TRUE);2.字体,大小,颜色.
这里的设置比较麻烦一点,GTKLABEL本身并没有提供直接的方法来操作这些属性,其它库的操作方法见后面补充。pango markup
而是提供了一种类似html浏览器的方法,需要在代码中设定.
如:
这里的<span>标签就是用来操作label显示的属性的,包括背景色,字体色,字体,字体大小,下划线,等等.
其中foreground='red' 就是定义前景色(字体颜色)为红色,也可以foreground='#00FF00',这两个值是相等的.
underline='double' 是下划线为双线,还可以设值为'none', 'single', 'double', 'low', 'error' 等.
underline_color='blue' 是下划线的颜色.
此外,还可以选的属性有:
font_desc 字体大小,值如'12',官方文档说明为字体描述,但我测试结果为字体大小
size 官方文档为字体大小,但我测试结果不起作用.
stype 样式,值如'normal', 'oblique', 'italic' 等.
weight 字型,值如'ultralight', 'light', 'normal', 'bold', 'ultrabold'等
stretch 拉伸,值如'ultracondensed', 'extracondensed', 'condensed','semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded','ultraexpanded'
属性值不一一列出,你可以参考安装时程序携带的文档,相对位置为"share/gtk-doc/html/pango/PangoMarkupFormat.html"
注意:官方文档中有好多错误,可以参考但不可全信.
主要内容如下:
整体看起来这个label就像是一个特定功能的webBrowse.
尽管功能比较强大,但给我们动态控制label属性带来很大的麻烦.
*事件
GtkLabel提供了三个事件:move_cursor,copy_clipboard, populate_popup.
第一个事件为光标移动事件。第二个是内容被复制.
第一个我测试了好长时间,没有触发,而且头文件中函数原型与官方文档定义不符.
第二个测试成功,当我选择label中内容并复制后,窗体的标题被修改.
总代码如下:
补充:
良久之后,才发现,原来可以用pango和gdk库来操作label的颜色,字体,大小等.
其实不仅仅是label,其它的一些gtk控件也可以用同样的方法操作.
看代码:
比之前多引用了两个头文件:gdk和pango.
用gtk_widget_modify_fg函数来改变控件的前景色,用gtk_widget_modify_font来改变控件的字体(包含字体大小).
当然,在makefile中别忘了也要加上这两个库文件:gdk-win32-2.0.lib和pango-1.0.lib.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-51836-1.html
这年头