0. 介紹
wxWidgets是一個開源的跨平台的C++構架庫(framework),它可以提供GUI和其它工具。目前的3.0.0版本支持所有版本的Windows、帶GTK+或Motif的Unix和MacOS。wxWidgets在不同平台上使用Native API完成GUI相關工作,所以性能和最終App的體積都比Qt好很多。經過十多年的發展,其穩定性、兼容性和相關文檔都已日臻完善。在前幾年其開發文檔曾遭受詬病,但最新的3.0.0所帶文檔已相當完整。
1. 下載
下載地址:http://www.wxwidgets.org/downloads/
此處我們下載Windows安裝版。
2. 編譯
安裝完成后,使用VS20xx打開安裝目錄下的build/msw/xxx.sln文件。建議把每個configuration都build一次。
注:據文檔稱,如果一次編譯不能全部通過,可能是子項目編譯順序引起的問題,只要再編譯一到兩次就可以了。在我的VS2012上一次編譯通過。
3. 編譯完成后,讓我們來做一個帶窗口的最小程序。
新建一個vc++空項目;
添加五個文件:
MyFrame.cpp MyFrame.h (窗口Frame類,繼承於wxFrame,將被MyApp實例化)
MyApp.cpp MyApp.h (應用程序類,繼承於wxApp,在OnInit成員函數中實例化MyFrame,將被main.cpp實例化)
main.cpp (主文件,實例化MyApp)
4. 工程包含目錄中添加wxWidget安裝目錄下的include和include/msw
5. 工程lib目錄附加wxWidget安裝目錄下的lib/vc_lib
6. 增加預處理_UNICODE
7. MyFrame.h
#ifndef MYFRAME_H #define MYFRAME_H #include <wx/wx.h> class MyFrame : public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); }; #endif // MYFRAME_H
8. MyFrame.cpp
#include "MyFrame.h" // 代碼想當簡短,只是調用基類構造函數 MyFrame :: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size) { }
9. MyApp.h
#ifndef MYAPP_H #define MYAPP_H #include <wx/wx.h> class MyApp : public wxApp { public: // 我們需要重新實現基類虛函數 virtual bool OnInit(); }; #endif // MYAPP_H
10. MyApp.cpp
#include "MyApp.h" #include "MyFrame.h" bool MyApp :: OnInit() { // 實例化窗口框架類 MyFrame *myFrame = new MyFrame("MyApp", wxDefaultPosition, wxDefaultSize); myFrame->Show(); return true; }
11. main.cpp
#include <wx/wx.h> #include "MyApp.h" #include "MyFrame.h" // 核心代碼只需一行 wxIMPLEMENT_APP(MyApp);
12. 沒什么問題的話,編譯會順利完成,運行后顯示一個空窗口。
13. 附加說明:wxApp::OnInit()相當於main函數,可以把它看作整個程序的入口。
14. 結語
早期的wxWidgets編程風格類似於MFC,其消息處理使用DECLARE_EVENT/BEGIN_EVENT_TABLE/END_EVENT_TABLE實現。新的wxWidgets可以像Qt的connect函數那樣,使用bind函數完成消息和處理函數的動態綁定。應該說,wxWidgets正走在逐漸完美的路上。