註:這是FLTK的PDF手冊中第11章介紹FLUID編程的翻譯,新手翻譯很多不懂,錯誤之處,不吝提出,及時更改。翻譯中不會翻譯或者感覺不太明白的地方在每句之後使用【??】標記。
Chapter 11 使用FLUID編程
本章介紹怎樣使用Fast Light User-Interface Designer(“FLUID”)建立你的圖形化使用者介面(GUIs). 章節目錄如下:
11.1 FLUID是什麼
快速輕量使用者介面設計器(FastLight User-Interface Designer)或者叫FLUID,是一個用來產生FLTK原始碼的圖形編輯器。FLUID編輯和儲存它的狀態在.fl檔案中。這些檔案是文本,所以你可以在文字編輯器中編輯它們(需要小心處理),可能會收到意想不到的效果。
FLUID能夠編譯.fl檔案產生.cxx和.h檔案。.cxx檔案定義.fl檔案中的所有的對象而.h檔案聲明所有的全域對象。FLUID也支援標籤字串的本地化(國際化)使用的是訊息檔案和GNU的gettext或者POSIX的catgets介面。【譯註:這兩個應該是程式本地化的工具】。
你可以將所有的代碼(包括main()函數)都放進.fl檔案中產生一個簡單的程式,然後只產生一個用於編譯的.cxx源檔案。多數程式要比這複雜得多,所以你需要寫其他的調用FLUID函數的cxx檔案。這些cxx檔案必須#include那些.h檔案或者它們#include這些cxx檔案所以它看起來仍然像一個單獨的源檔案。
圖11.1 FLUID的組織圖
一般FLUID檔案定義一個或多個輸出C++代碼的函數或者類。每個函數定義一個或多個FLTK視窗以及在這些視窗中的所有圖形構件。
FLUID建立的構件可以是“命名的(named)”,“複合命名的(complex named)”或者“未命名的(unnamed)”。一個命名的構件使用一個合法的C++變數標示符作為它的名字(也就是數字字母和底線)。這種情況下FLUID在(程式中)調用定義構件的函數之後將定義一個指向該構件的全域變數或者類成員。一個複合命名物件在名字中有一個’.’或者’->’標點或者其他的符號,這種情況下FLUID將分配一個指向構件名字【??】的指標,但是並不嘗試去聲明它。這可用於將構件放入結構體中。一個未命名的構件有一個空的名字而且沒有指標被儲存。
構件可以調用一個你在另一個源檔案中寫得命名回呼函數或者你可以提供一小段C++源碼然後FLUID將其產生為一個私人回呼函數放入cxx檔案中。
11.2 UNIX下運行FLUID
要在UNIX下運行FLUID,輸入:
Fluid filename.fl &
來編輯名字為filename.fl的fl檔案。如果該檔案不存在,將彈出一個錯誤,但是如果忽略你將可以編輯一個空的以那個名字命名的檔案。你可以不通過名字運行FLUID,在這種情況下你可以編輯一個空的設定【??】,但是你可以使用另存新檔將其儲存到檔案中。
你可以在檔案名稱字前使用(以下)任何標準的FLTK開關【選項】:
-display host:n.n
-geometry WxH+X+Y
-title windowtitle
-name classname
-iconic
-fg color
-bg color
-bg2 color
-scheme schemename
如果使用者調用了顏色開關選項那麼改變顏色來看看你的介面看起來如何可能是有用的。類似的,使用”-scheme plastic”將顯示使用了”plastic”主題的介面顯示看起來怎麼樣。
在目前的版本中,如果你不使用’&’將FLUID作為後台運行,你可以使用在終端輸入CTRL-C的方式退出FLUID。它將立即退出,丟失所有的修改。
11.3 在Windows下運行FLUID
要在Win32下運行FLUID,只需要雙擊FLUID.exe檔案就可以了。你當然也可以通過命令提示字元視窗啟動。在Win32下FLUID是在後台啟動並執行。
11.4 編譯.
fl檔案
FLUID也可以被用作一個命令列“編譯器“來從.fl檔案產生.cxx和.h檔案。要這樣做,只要輸入:
fluid –cfilename.fl
該命令將讀filename.fl檔案並且產生filename.cxx和filename.h檔案。所有的filename.fl的首碼路徑將被去除,所以它們(cxx和h)將被寫入到目前的目錄下。如果讀或者寫檔案時發生錯誤,FLUID將列印錯誤並且以非零退出碼退出。你可以在makefile中使用下面的代碼來自動化產生源檔案和標頭檔:
my_panels.hmy_panels.cxx: my_panels.fl fluid –c my_panels.fl
大部分版本的make都支援編譯.fl的規則:【??】
.SUFFIXES: .fl.cxx .h
.fl.h .fl.cxx:
fluid –c $<
11.5 一個簡短的指南
FLUID是一個令人驚奇的功能強勁的小程式。然而這種功能是有代價的,那就是它不能完成看起來很簡單的任務。該指南將介紹怎樣使用FLUID產生一個在CubeView程式中使用的完整的使用者介面類,該CubeView程式是由FLTK提供的。
圖11.2 CubeView例子
這個視窗就是類CubeViewUI,包括所有的類函數在內,所有這些都是由FLUID產生的。立方體的顯示中心是一個單獨的叫做CubeView的Fl_Gl_Window的子類。CubeViewUI通過滑動塊和滾軸的回呼函數來控制CubeView類,從而實現CubeView的視角變換和縮放。
在本指南結束時,你將學到如下知識(希望如此):
1、 使用FLUID建立一個完整的使用者介面類,包括建構函式和任何需要的成員函數。
2、 使用FLUID設定自訂構件類的回調成員函數。
3、 子類化Fl_Gl_Window來滿足你的需要。