文檔中心

控件開發_自動布局和配置文件

01.控件的布局文件

华东15选5 www.wjnoc.com 在《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

上表都是控件的公共標志,當然也支持不同控件的私有標志,沒有列出來,詳見具體控件。

通過下面函數來加載布局文件:

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”);
{ganrao}