文档中心__武汉蓝星科技股份有限公司

文档中心

控件开发_自动布局和配置文件

01.控件的布局文件

在《4.控件开发_基础》中介绍了所有的控件都组织在一棵控件树上,根窗口控件是树根,控件树的组织结构和控件相对于父控件的位置和大小等信息称为控件的布局。

控件的布局信息也是属于控件的公共属性。

所有的控件(除了根窗口控件)都是通过 tnCreate()这一个函数来创建,创建时需要指定布局信息(父控件、相对于父控件的位置、大小)、标记(可以包含私有标记)、显示风格名等公共属性。

控件的公共属性则都写到一个 ini文件(ini文件格式见《3.开发平台_基础》)中,只需要加载该文件,就可以一次自动批量的创建所有控件,并设置好属性。这个 ini文件称之为布局文件。而且以后修改控件的布局也不用重新编译程序。

如《4.控件开发_基础》中 hello例子中的布局文件为:

#注释(直到换行)

mainwindow = {
    type="window"
    x=20; y=20; w = 200; h=100
    caption="hello"
    #style=”style_name”
    #flags=0
    button_ok = {
        type="button"
        x=20; y=20; w=50; h=30
        caption="ok"
        #style="style_name"
        #flags=0
    }
    button_cancel = {
        type = "button"
        x=100; y=20; w=50; h=30
        caption="cancel"
        #style="style_name"
        #flags=0
    }
}

该布局文件中有三个table对应三个控件mainwindow,button_ok, button_cancel,其中 mainwindow是这个布局文件的顶层(顶层窗口就是布局文件中最 外层的窗口,可以有多个顶层窗口),其他两个是它的子控件。

一个 table中的非 table项就是该控件的属性,具体有:

说明

type

一个字符串的 id,例如 type=“window”

控件的类型

x

一个整数,例如 x=100

相对于父控件的位置

y

一个整数,例如 y=800

w

一个整数,例如 w=200

控件的大小

h

一个整数,例如 h=50

style

一个字符串,例如 style=”hello”

控件的风格名

flags

一个或多个标记,例如 flags=hide

或者 flags={no_focus; child_no_focus;}

控件的标志(公共标记和私有

标记)

caption

一个字符串,例如 caption=”ok”

控件的标题

layout

一个字符串,自动布局的信息(目前只针对窗口控件),详见本文后面内容。

min_w

整数值,指定窗口控件(Window)的最小宽高(只针对窗口控件),这是窗口

控件的排版属性。

min_h

注意:caption的内容会通过 TwTrans()自动翻译。

flags就对应控件的标志,多个 flags可以写到一个子 table中。

flags

对应的控件标志

no_focus

TW_NO_FOCUS

child_no_focus

TW_CHILD_NO_FOCUS

disable

TW_DISABLE

hide

TW_HIDE

layout_fix_w

TW_LAYOUT_FIX_W

layout_fix_h

TW_LAYOUT_FIX_H

layout_fix_size

TW_LAYOUT_FIX_W|TW_LAYOUT_FIX_H

hide_h_scrollbar

TW_HIDE_H_SCROLL

上表都是控件的公共标志,当然也chaojitoukui.com不同控件的私有标志,没有列出来,详见具体控件。

通过下面函数来加载布局文件:

void TwLayoutParseFile(TWidget *parent, const char * file);

例如:

/* 假定程序为/some/path/bin/file1,布局文件为/some/path/layout/file4 */ 
TwLayoutParseFile(NULL, TGetExecutePath(“../layout/file4”));

该函数一次性创建布局文件中的所有控件,参数 parent是布局文件中顶层控件的父控件,parent参数传 NULL表示以根窗口控件为父控件。

布局文件中 table前面的字符串就是这个控件对象的名字 (见《TD开发平台_对象系统》中的对象名字),如上面的 mainwindow,button_ok, 和 button_cancel。通过名字可以在程序中取得这个控件,例如:

TWidget *mainwindow, *button_ok, *button_cancel;
mainwindow = TObjectGetFromName(“mainwindow”);
button_ok = TObjectGetFromName(“button_ok”);
button_cancel = TObjectGetFromName(“button_cancel”);