11.9 Image Labels
在Image和Inactive域中的影像檔的內容被寫入到.cxx檔案中。如果多個構件共用相同的映像,則只有一個拷貝被寫入。因為映像資料在產生的源碼中,所以你只需要分發C++的源碼即可而不需要影像檔本身。
然而影像檔名儲存在.fl檔案中,所以在讀.fl檔案時你需要影像檔。影像檔名路徑是相對於fl檔案的路徑而不必放到當前路徑下,我們建議你要麼將映像與fl檔案放到同一目錄下要麼使用絕對路徑名。
所有檔案類型的注意事項
Notes for All Image Types
FLUID使用你的X伺服器的預設映像運行【??】。這可能是可以給出抖動映像的8位元影像像。在你的代碼中第一個視窗顯示之前加入代碼”Fl::visual(FL_RGB)”到你的實際程式中可能獲得更好的結果。所有使用同一幅映像的構件共用相同的代碼和源X象圖。所以一旦你已經將一幅映像放到的一個構件中,則將相同的映像放入其他的構件中幾乎不費吹灰之力。
如果你在FLUID正使用一幅映像時編輯這幅映像,那麼唯一使得FLUID能夠再次讀取影像檔的方法是將映像從使用它的所有構件中移除或者從fl檔案中重新載入。
不要仰仗FLTK對超出構件的映像的裁剪行為,因為在將來的版本中這可能就不會奏效了。在標籤內部的裁剪可能就不會改變了。
為更精確的放置映像,可以建立一個新的box構件,將映像作為標籤放入到其中。
XBM (X 位元影像)檔案
FLUID讀取使用C源碼定義的位元影像的X位元影像檔案【??】。有時檔案儲存的副檔名為.h或者.bm而不是標準的.xbm。
FLUID用代碼來構造Fl_Bitmap映像,並使用它作為構件的標籤。在位元影像中的位1使用構件標籤的顏色畫出。你可以在FLUID的構件屬性面板中改變這個顏色,位0是透明的。
X分發中的位元影像程式足夠編輯位元影像的任務了。
XPM (X 象圖)檔案
FLUID像libxpm庫一樣讀取X象圖檔案。這些檔案使用C源檔案定義象圖,副檔名通常是.xpm。
FLUID用代碼來構造Fl_Pixmap映像,並使用它作為構件的標籤。構件的標籤顏色將不忽略,即使是兩種顏色的映像也可以是位元影像【??】。XPM檔案可以標記一個單獨的顏色作為透明色,FLTK使用這個資訊來為映像產生一個透明掩膜。
我們還沒有發現號的小表徵圖影像編輯器,對於象圖我們使用過XPaint和KDE表徵圖編輯器。
BMP檔案
FLUID讀取windows的BMP檔案,BMP映像經常作為WIN32程式的表徵圖。FLUID將BMP檔案轉為XPM格式,並且使用Fl_VMP_Image映像作為構件標籤。對於透明的處理與XPM檔案一樣,寫入源檔案中的所有映像資料都是未壓縮的,所以代碼檔案可能比bmp檔案大得多。
GIF檔案
FLUID讀取在HTML文檔中經常使用的GIF映像,FLUID將GIF檔案轉換為XPM格式並使用Fl_GIF_Image映像作為構件的標籤。對於透明的處理與XPM檔案一樣,寫入源檔案中的所有映像資料都是未壓縮的,所以代碼檔案可能比gif檔案大得多。只有第一幅GIF映像是動態【??】。
JPEG檔案
如果FLTK使用的JPEG支援編譯的,FLUID就可以讀取JPEG影像檔,JPEG檔案常用在數位影像中,FLUID使用Fl_JPEG_Image映像作為構件標籤,將未壓縮的RGB或者灰階資料寫入源檔案中。
PNG (Portable Network Graphics)檔案
如果FLTK使用了PNG支援編譯,則FLUID可以讀取經常在HTML文檔中用到的PNG影像檔。FLUID使用Fl_PNG_Image映像作為構件標籤,將未壓縮的RGB或者灰階資料寫入源檔案中。PNG映像可以為部分透明提供一個完整的alpha通道,FLTK在每個平台上都儘力支援該功能。
11.10 FLUID的國際化
FLUID支援構件標籤字串的國際化(簡稱I18N)。偏好視窗提供了關於I18N的選項。
11.10.1 I18N方法
FLUID支援關於三種方法用於I18N:什麼都不用、使用GUN gettext或者使用POSIX catgets。什麼都不使用的方法是預設的,僅僅將標籤字串傳遞給構件建構函式。
GUN gettext方法使用GUN gettext(或者一個相似的基於文本的I18N庫)在調用構件的建構函式之前返回一個本地字串。
POSIX catgets方法使用POSIX catgets函數在調用構件建構函式之前從訊息目錄中返回一個編號的訊息。
11.10.2 使用GNU gettext完成I18N
FLUID中的GUN gettext對代碼的支援被限制在只能調用函數或者宏來返回本地標籤。你仍然需要調用setlocale()和textdomain()或者bindtextdomain()來選擇合適的語言和訊息檔案。
要使用GNU gettext,開啟偏好視窗,從Use:選取器中選擇”GNU
gettext”,兩個新的輸入欄位將出現,可以控制返回本地標籤字串時包含的檔案以及使用的函數或者宏名。
圖11.11 使用GNU gettext的國際化
#include域控制I18N的包含標頭檔,預設是GNU gettext的標準I18N檔案<libintl.h>。
Function域控制返回本地訊息的函數(或者宏),預設時gettext函數將被調用。
11.10.3 使用POSIX catgets完成I18N
FLUID中POSIX catgets的代碼支援允許你對所有的介面使用一個全域的訊息檔案或者對每個fl檔案一個特殊的檔案。你仍然需要調用setlocale()來選擇合適的語言。
要為I18N使用POSIX catgets,開啟偏好視窗,從Use:選取器中選擇”
POSIX catgets”,三個新的輸入欄位將出現,可以控制返回本地標籤字串時的包含檔案、目錄檔案以及設定的編號。
圖11.12 使用POSIX catgetst實現國際化
#include域控制I18N的包含標頭檔,預設是POSIX catgetst的標準I18N檔案<nl_types.h>。
File域控制返回本地訊息時使用的目錄檔案變數的名字【??】。預設時file域為空白強制fl檔案中定義的所有視窗使用本地(靜態)的目錄檔案。
Set域目錄檔案中設定的編號。預設的設定為1,很少需要做修改。
11.11 已知的缺陷
可以使用#if 0和#endif聲明塊來臨時封閉已經設計好的代碼,這可以有效避免代碼塊的編譯,但是,該段產生的靜態代碼和資料(功能表項目、映像、包含聲明等)仍然會產生,而且可能引起編譯時間警告。
【後記】:終於翻譯完了,本來翻譯了一半時就不想再做了,雖然自己英語水平很爛,但是感覺這手冊像是用英語的方言寫的,各種文法的不通,最後本著善始善終的原則總算把它翻譯完了。自己本來倒也不是為了使用FLUID而翻譯的,FLUID是一個用來設計介面並且可以將介面裝換為代碼的工具,翻譯這個手冊是為了瞭解一下它都有些什麼功能,想參考參考它的源碼,從中吸取點營養。最終硬著頭皮翻譯完了,將就著看吧,很多地方自己也不懂。
完整的word附上:http://download.csdn.net/detail/ljbsdu/4704452 辛苦了這麼久,總得有點辛苦費,3個積分,沒有積分的可以聯絡我。