環境介紹
系統:win10 64位
IDE:VS 2017 Community
FLTK版本:1.3.4-2
下載FLTK
截止到本文編寫,FLTK的最新穩定版本是1.3.4-2。我們從官網(www.fltk.org)下載到它的源碼包。如下圖:
我把它解壓到D:\FLTK目錄下:
編譯FLTK
FLTK是跨平台的C++ GUI庫,以源代碼形式發布,因此在使用前需要編譯。FLTK官方推薦在Windows系統下,將FLTK編譯成靜態鏈接庫的形式使用。在解壓后的目錄下找到:ide目錄,里面提供了預先配置好的VS和Xcode項目。
在README文件中發現如下內容:
ide/VisualC6 Microsoft Visual C++ 6 and 2005 (2)
ide/VisualC2008 Microsoft Visual C++ 2008
ide/VisualC2010 Microsoft Visual C++ 2010 and later (3)
ide/Xcode4 Apple Xcode 3.x and up (see ../README.OSX.txt)
因此我們選擇VisualC2010目錄,並雙擊里面的 “fltk.sln” 就可以用VS2017打開解決方案。打開時會彈出如下窗口,意思是將項目更新到最新的VS兼容版本,點擊確認即可。
打開解決方案后,在左邊的項目列表中找到demo項目,右鍵之,選擇【設為啟動項目】,如下圖:
將項目配置為Debug模式下的Win32開發平台(默認就是這樣,一般無需改動)
按【F7】或者點擊菜單欄的【生成】->【生成解決方案】開始編譯,大約3~5分鍾就好。
一切順利會得到如下圖的編譯輸出信息
然后將Debug切換為Release,其它不變,再從新生成解決方案。 一切順利后,我們【Ctrl + F5】運行demo項目,會看到一個官方的演示程序(注:Debug模式運行會帶一個命令行窗口,Release模式則不帶)。如下圖:
配置開發環境
現在我們可以關閉VS2017了。
前面2次生成解決方案會編譯形成14個.lib后綴的靜態庫文件,他們位於FLTK的lib目錄下。文件名稱以d結尾的表示是debug模式下編譯形成的,不帶d的則是release模式下形成的,例如fltkd.lib和fltk.lib。
打開VS2017的VC++ 目錄,我的機器上是:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023
第一步:將14個.lib文件拷貝到上圖VC++的lib目錄下的x86目錄下。拷貝后如下圖:
第二步:將FLTK目錄下的FL文件夾拷貝VC++的的include目錄下。拷貝后如下圖:
新建一個FLTK應用程序
使用VS2017新建一個VC++空項目名為hello,如下圖:
向項目中添加一個main.cpp源文件,使用下面的測試代碼。
#include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Box.H> int main(int argc, char *argv[]) { Fl_Window *window; Fl_Box *box; window = new Fl_Window(450, 330, "First App!"); box = new Fl_Box(20, 40, 360, 200, "Hello World,世界你好"); box->box(FL_FLAT_BOX); box->labelsize(36); //設置字體大小 box->labelfont(FL_BOLD + FL_ITALIC); //設置字體 box->labeltype(FL_SHADOW_LABEL); //設置label的類型 window->end(); window->show(argc, argv); return Fl::run(); }
先不急着運行,要對項目進行如下2部分配置。右鍵項目名【hello】->【屬性】可以打開下面的配置窗口。
下圖演示了對項目的Debug模式進行配置的細節。當要發布程序的release版本時,同樣需要對Release模式進行配置再編譯。二者的區別在於,【附加依賴項】中,輸入的lib靜態庫不同,Debug模式使用名稱帶d的庫,Release模式則使用不帶d的庫。
FLTK源代碼中,會根據平台相關宏來進行條件編譯,從而實現跨平台的特性,Windows平台對應的宏就是WIN32,因此我們需要預定義這個宏。
添加依賴庫。Comctl32.lib是必須的,然后就是FLTK相關的靜態庫。FLTK相關的靜態庫有7對,應用程序使用了某些功能,就添加對應的FLTK靜態庫,fltkd.lib(Release模式下是fltk.lib)是必須的。
運行效果:
為什么程序總是帶命令行窗口?
/subsystem:windows
/subsystem:console
為什么中文亂碼?
FLTK 1.3.4是支持UTF-8編碼的。如果出現了中文亂碼情況,通過將源代碼文件轉變為UTF-8編碼格式可能會解決。
這里推薦一個VS插件,可以強制新建的文件都以UTF-8編碼方式編碼。