wxWidgets:入門


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正走在逐漸完美的路上。

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM