在Gtk+中使用流式布局
搞Gtk的大牛们搞什么飞机哦,布局Widget这样的东西,居然被大牛们当成MM一样藏起来拉!就藏在GIMP里面作Custom Widget也不放到GTK作为标准控件。
做一个小玩意时我遇到了一个比较令人苦恼的问题,那就是Gtk+ 的布局管理Widget里面没有那种像Java Flowlayout一样的东西。什么box,什么frame,都不是我想要的。
记得学java布局管理的时候觉得流式布局真白痴,其实也有可用之处啊,最典型的就是GIMP和Dia这样的toolbox啦,就像下面这样,在WIndows的UI系统里面搞这个不是那么容易的吧…
我在Gtk的参考里面找啊找,还是没找到,于是去看Dia的源代码去。
NNNNND!我我居然发现了一个叫GtkWrapBox的Widget。NNND,去google一看,还真有这个玩意,就在Gimp的在线Gtk接口文档中。
可以看到这个叫GtkWrapBox的Widget有两个派生,分别是横向折行和纵向折行;可以看到这个叫GtkWrapBox的Widget还是GtkContainer的派生类;但是最可恶的地方就是——你去看文档里面的Object Hierarchy吧,GtkContainer下绝对没有GtkWrapBox,GtkWrapBox的上层Object绝对是 GtkContainer。NND。
http://developer.gimp.org/api/2.0/app/GtkWrapBox.html#id3166842
http://developer.gimp.org/api/2.0/gtk/GtkContainer.html#id3824858
搞Gtk的大牛们搞什么飞机哦,布局Widget这样的东西,居然被大牛们当成MM一样藏起来拉!就藏在GIMP里面作Custom Widget也不放到GTK作为标准控件。
好了,既然这样就好办了。我去把GtkWrapBox的源码搞过来看一下就好了。源码如下:
$ ls *.c *.h
gtkhwrapbox.c gtkvwrapbox.c gtkwrapbox.c
gtkhwrapbox.h gtkvwrapbox.h gtkwrapbox.h
下面我来测试一下下啦。我拿GTK 的Hello World改了一段代码,可用!
[main.c]:
#include
#include
#include
#include “gtkhwrapbox.h”
/* This is a callback function. The data arguments are ignored
* in this example. More on callbacks below. */
static void hello( GtkWidget *widget,
[...]