我們要實現乙個帶標題欄和狀態列的程式,同時要支援拉伸,即包括最小化、最大化,圖如下:
在duidesigner中,拖動視窗邊框,即可看到效果,標題欄和狀態列的位置都不變,即隨視窗大小而改變。
看屬性,發現,status和title都有屬性 height,而中間的,什麼屬性都沒有。在視窗設定如下:
可以知道,pos即可以設定float屬性為false的拉伸操作,所以不只是layout可以隨視窗(準確的說應該是擁有它的layout)自由拉伸,普通的控制項也可以,只要float為false。
float意思為浮動,當它為true時,它就浮動在視窗上面,位置永遠不會變(相對於擁有它的layout)。
當它為false時,它浮不起來,停在水上,隨波逐流,所以能夠被流水(layout)改變它的大小。
注意,只有right和bottom才有效。如果不為0,那麼它就是該高度,即不隨父layout改變大小(位置不能更改)。為0就是跟父layout更改大小。
在上面這個示例中,關閉按鈕並不隨著視窗改變位置,因為我們看到了,它的float為true。如果我們想要它永遠停在最右邊呢?
看下面的xml:
xml version="1.0" encoding="utf-8" standalone="yes"我們加了乙個 float 的 control,以及將關閉按鈕的 maxwidth設定為60,同時float設定為false(float屬性預設為false)。?>
<
window
size
="695,542"
>
<
verticallayout
width
="657"
height
="517"
bkcolor
="#ffa0a0a4"
>
<
horizontallayout
name
="title"
height
="32"
bkcolor
="#ff63a6f1"
>
<
button
text
="x"
bordersize
="1"
maxwidth="60"
pos="608,0,0,0"
width
="60"
height
="30"
bkcolor
="#ff008067"
bkcolor2
="#0000c020"
bordercolor
="#00ffff00"
textcolor
="#ff000000"
disabledtextcolor
="#ffa7a6aa"
align
="center"
/>
horizontallayout
>
<
horizontallayout
name
="mid"
bkcolor
="#ffbababa"
/>
<
horizontallayout
name
="status"
height
="30"
bkcolor
="#ff808080"
/>
verticallayout
>
window
>
這樣設定的意思是:關閉按鈕最大寬度為60,所以它不能被拉得更寬。
在它的左邊有乙個float,它可以被任意拉伸。所以當視窗被拉伸時,關閉按鈕為60,左邊的control就被拉伸到視窗寬 - 60。
如果最右邊要加最大化、最小化按鈕,實現原理也是一樣的。當然,你可以在最右邊加乙個layout,在這個layout上加上最小化、最大化、關閉按鈕,這樣層次感更強,也更容易管理和修改。
Duilib教程 自動布局1
我們要實現乙個帶標題欄和狀態列的程式,同時要支援拉伸,即包括最小化 最大化,圖如下 在duidesigner中,拖動視窗邊框,即可看到效果,標題欄和狀態列的位置都不變,即隨視窗大小而改變。看屬性,發現,status和title都有屬性 height,而中間的,什麼屬性都沒有。在視窗設定如下 可以知道...
Duilib教程 自動布局2
在上一節中,我簡單介紹了控制項隨父layout自由移動的設定。在這一節,我將介紹一種常見的情況 嵌入視窗。uimanager.cpp 第750行 case wm size event.type uievent windowsize event.psender m pfocus event.dwtim...
Duilib教程 自動布局2
在上一節中,我簡單介紹了控制項隨父layout自由移動的設定。在這一節,我將介紹一種常見的情況 嵌入視窗。uimanager.cpp 第750行 case wm size event.type uievent windowsize event.psender m pfocus event.dwtim...