作用
在編寫軟體時,如果需要圖形用戶界面(GUI),則需要使用GUI庫。和調用stdio庫的getchar()函式讀取鍵盤輸入類似,調用GUI庫的函式就可以繪製出框線、按鈕等圖形。
幾種出色的C/C++ GUI函式館
Qt
Qt是Trolltech公司的一個多平台的C++圖形用戶界面應用程式框架。它提供給應用程式開發者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的很容易擴展,並且允許真正地組件編程。自從1996年早些時候,Qt進入商業領域,它已經成為全世界範圍內數千種成功的應用程式的基礎。Qt也是流行的Linux桌面環境KDE的基礎,同時它還支持Windows、Macintosh、Unix/X11等多種平台。
GTK
GTK是一個大名鼎鼎的C的開源GUI庫。在Linux世界中有Gnome這樣的殺手套用。而GTKmm就是這個庫的C++封裝版本。
WxWidgets
跨平台的GUI庫。因為其類層次極像MFC,所以有文章介紹從MFC到WxWidgets的代碼移植以實現跨平台的功能。通過多年的開發也是一個日趨完善的GUI庫,支持同樣不弱於前面兩個庫。並且是完全開放原始碼的。新近的C++ Builder X的GUI設計器就是基於這個庫的。
MFC
大名鼎鼎的微軟基礎類庫(Microsoft Foundation Class)。但凡學過VC++的人都應該知道這個庫。雖然從技術角度講,MFC是不大漂亮的,但是它構建於Windows API 之上,能夠使程式設計師的工作更容易,編程效率高,減少了大量在建立 Windows 程式時必須編寫的代碼,同時它還提供了所有一般 C++ 編程的優點,例如繼承和封裝。MFC 編寫的程式在各個版本的Windows作業系統上是可移植的,例如,在Windows 3.1下編寫的代碼可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近發展以及官方支持上日漸勢微。
Fox
開放原始碼的GUI庫。作者從自己親身的開發經驗中得出了一個理想的GUI庫應該是什麼樣子的感受出發,從而開始了對這個庫的開發。有興趣的可以嘗試一下。
WTL
基於ATL的一個庫。因為使用了大量ATL的輕量級手法,模板等技術,在代碼尺寸,以及速度最佳化方面做得非常到位。主要面向的使用群體是開發COM輕量級供網路下載的可視化控制項的開發者。
FLTK
fltk偏向於開發OpenGL圖形應用程式,有界面設計器fluid,比較輕量級,所以不支持很多功能,例如Network、Print。代碼中使用下劃線。界面很像Motif,小而快是它的特點。LGPL協定,但有更多限制(好像分為是否修改原始碼還是繼承了widget類)。依賴靜態回調函式,沒有檔案對話框,不支持拖曳和剪貼簿。比較起來,似乎比Fox穩定。和Motif一樣使用函式指針實現signal機制。
VCF
Visual Component Framework的框架設計非常好,不象Qt和wxWidget,它大量使用STL,比FLTK/Fox具有更加豐富的API,預設使用Unicode,支持內置的國際化(本地化)和Undo/Redo機制,多執行緒和RTTI的支持也很好,可以說功能的豐富性直逼wxWidget和Qt,代碼風格也是我喜歡的類型(使用namespace和類似java的命名方式)。它的目標是象VB一樣使用C++,有Visual C++的外掛程式支持RAD。運用模板和適當的宏實現了反射(RTTI)(不需要象Qt那樣生成metaObject),用Observer模式實現了事件系統,庫比Qt和MFC都小,大約2M左右。唯一讓我遺憾的是它還不夠成熟。
Notus
設計風格更加現代的框架,大量使用STL/Boost和模板技術,如果討厭層次結構和多態的GUI框架,這個適合你。遺憾的是該項目不夠成熟(Pre-alpha)。
Win32 GUI Generics
這是一個純C++庫,利用了C++裡面的高級特性,避免了MFC裡面的諸多問題,由於使用的event handler機制和MFC裡面的MESSAGE MAP機制有本質的不同,所以不像MFC裡面有一打莫名其妙的宏,整個框架非常乾淨整潔,當然,編寫出來的代碼也一樣!