Nana開發 版本0 5

2021-06-13 17:16:52 字數 2959 閱讀 8601

在0.5中,引入了乙個新的布局類 - class place,該類提供了乙個更加簡便的方法來實現視窗的布局。class place是將於之繫結的視窗根據設計劃分為幾個區域,然後將子控制項加入到各個區域中。本篇用乙個示例來講解class place的基本用法,然後再介紹place的詳細規則。

開始示例

現在,建立乙個用於驗證使用者賬號的登入介面。這個程式看起來如下圖所示:

首先,為了達到這個布局效果,我們需要將視窗劃分成幾個區域(field)。其中乙個劃分方法如下圖所示:

class place是以乙個divide-text的字串引數來劃分field的。因此先需要確定divide-text(其詳細的語法參見第二部分的介紹)

紅色矩形框的divide-text看起來應該像這樣

<>

children_fields_of_red_rectangle>

<>

root-field的子field預設是以水平方向排列,因此這裡三個field以水平方式排列。紅色框位於視窗中間,並佔據視窗80%的寬度,我們指定它的weight屬性為80%。現在,如你所見,紅色框中的子框是以垂直方式排列,因此我們需要指定紅色方框為vertical。

橙色矩形框的divide-text看起來應該像這樣

<>children_fields_of_orange_rectangle>

<>

橙色框也是位於視窗中間,並佔據視窗70%的高度,並且,它也需要被指定為vertical。

綠色和藍色矩形框的divide-text

綠色框中的控制項以垂直方式排列,藍色框中的按鈕以水平方式排列,因此只需要為綠色框指定vertical屬性。這裡,藍色框中的按鈕以水平方式排列,換句話說就是,藍色框的高度與按鈕的高度相同,因此我們指定藍色框的weight為25個畫素。這兩個field在稍後會被引用,並且向它們插入控制項,因此我們需要為它們每個提供乙個用於查詢的名字。

最後將這些divide-text組合在一起。

<>

<>

>

<>>

<>

現在,我們開始編碼

#include #include #include #include int main()

{ using namespace nana::gui;

//定義文字框和按鈕

form fm;

textbox usr(fm), pswd(fm);

button login(fm), cancel(fm);

usr.tip_string(str("user:")).multi_lines(false);

pswd.tip_string(str("password:")).multi_lines(false).mask('*');

login.caption(str("login"));

cancel.caption(str("cancel"));

//為視窗定義乙個place物件

place plc(fm);

//將視窗劃分為多個field

plc.div("<>><>><>");

//插入控制項

//textboxs field是以垂直方式排列, 它會自動調節控制項的y軸座標和高度。

//使用者框和密碼框都是單行文字框,因此我們應該為它們指定固定的高度。

plc.field("textboxs")<

這裡還有另乙個例子:建立乙個gui的計算器

divide-text語法

divide-text用於將視窗劃分為多個field(區域),各個field將對與之關聯的視窗進行布局。

定義乙個field

定義巢狀的field

root field

每個class place包含乙個隱式的root field(根區域),所有通過divide-text定義的field都是root field的子field

為field指定屬性

名字:為field指定乙個名字

定義了乙個名為id_you_specified的field,然後可以通過place_object.field("id_you_specified")來引用該field

vertical:指定field的子field以垂直方式布局。如果該屬性未被指定,那麼子field則以水平的方式排列。例如

如果我們將下面這樣

plc.div("");

替換為plc.div("");

然後我們就會獲得這樣的布局

weight:表示乙個field的高度或寬度,這個取決於其父field指定排列方式。

指定以畫素指定weight

如果視窗的寬度為1000畫素,那麼field abc就是800畫素,而def就是200畫素。

如果視窗的寬度為1000畫素,那麼field abc就是200畫素,def為600畫素,ghi則為200畫素。

grid [x, y]:指定field以網格的方式排列其子field

該field被劃分為3 x 2的網格

place plc(fm);

plc.div("");

plc.field("abc")<

gap:為網格field指定每個子field之間的間隙畫素

使用Nana進行C GUI開發

簡單示例 nanademo.cpp include include pragma comment lib,nana v140 debug x64.lib int main fm.show exec return 0 為避免控制台視窗的彈出,可使用預處理指令 pragma comment linker...

第05組 Beta版本演示

17計5天恆 20 59 00 組員學號 盧歡 組長 031702513 陳天恒031702527 古力亞爾 艾山 031702511 張聰031702515 嚴喜031702514 周華031702526 汪佳祥031702547 楊忠燎031702521 鐘璐英031702506 池九錫0317...

遊戲開發Day05

1.建立材質球 2.更改shader屬性 3.新增6張材質圖 window lighting skybox 給目標物體新增自定義指令碼colliderchecked 重寫oncollisionenter方法 bool flag true void oncollisionenter else 1.新建...