天天看點

wxWidgets學習-2--架構解釋

 使用Win32 Application

1. 引入 #include<wx/wx.h>

或<wx/wxprec.h>

當你的編譯器支援預處理器時,你可以使用wxprec頭檔案。當它不支援時,你應該包含wx.h,它包含了所有必須的wxWindows頭檔案。你同樣也可以為每一個控件分别包含相對應的頭檔案。

#include "wx/wxprec.h"

#ifndef WX_PRECOMP

    #include "wx/wx.h"

#endif

2. 建立兩個類:

class xxxApp : public wxApp

class xxxFrame : public wxFrame

3. 添加宏 

class xxxApp定義後添加

 DECLARE_APP(xxxApp)

class xxxApp實作後添加

 IMPLEMENT_APP(xxxApp)

宏 DECLARE_APP 和 IMPLEMENT_APP 為我們作下列操作:

當平台需要時,它建立一個 main() 或者 WinMain() 方法。

它建立一個全局方法 wxGetApp(). 你能夠使用這個函數去得到一個程式對象的引用:

wxGetApp() 使用方法

 HelloWorldApp &app = (HelloWorldApp&) wxGetApp();

也可說建立全局變量:wxTheApp

//

通過在class xxxApp定義後添加DECLARE_APP(xxxApp),你就可以調用wxGetApp()傳回

類xxxApp的對象。不使用DECLARE_APP也可以調用全局變量wxTheApp。

4. 重載 wxApp 的 virtual bool OnInit()函數,執行個體化Frame、顯示、設定位置

 {

  //建立

 xxFrame *frame=new xxFrame(NULL,-1,_T("hello"));

 frame->Centre();

 //顯示

 frame->Show();

 SetTopWindow(frame);

 return true; //TRUE表示初始化成功

}

//下一步系統就調用 wxApp 的wxApp::OnRun()開始消息循環

頂級視窗不同于子視窗,他在建立後必須顯式調用顯示函數。如:frames 和 dialogs

也可以使用調用wxFrame的default constructor,然後調用create()來解決

5. 在Frame的構造函數中,添加屬于Frame的Menu、status bar;

每一個菜單都需要一個獨立的ID。這是通過一個枚舉類型來完成的。而不能使用#define定義的常量(比如:#define MENU_FILE_MENU 1)因為這不能保證你有獨一無二的ID。它十分容易漏掉一些值并且當你想插入新的ID時這會變的十分難以維護。

  wxMenubar     

  wxMenu 

 wxMenu::Append(ID,"顯示字元");

 wxMenuBar::Append(&wxMenu);

 wxFrame::SetMenuBar(&wxMenuBar);

6. Command消息響應,

 1>處理消息的類定義添加:

  DECLARE_EVENT_TABLE()

 2>定義消息處理函數,不得是virtual、帶消息相關參數、傳回值是 void:

  void func(wxCommandEvent& event);

 3>定義 Menu Command ID,可采用const 或 enum

 enum

 {

  ID_CLOSE=1,ID_FILE_OPEN=2

 };

 如果ID的值為 -1,指定的任何事件都将激活與之相連的處理函數,因而你可以為所有菜單指令或所有指令按鈕僅加一條處理函數。

 4>實作COMMAND消息影射:

  BEGIN_EVENT_TABLE(xxFrame,基類)

   EVT_MENU(ID_CLOSE,HWFrame::OnClose)

  END_EVENT_TABLE()

7.wxFrame的Close(bool force = false)

wxWindow::Closebool Close(bool force = false)

 This function simply generates a wxCloseEvent whose handler usually tries to close the window. It doesn't close the window itself, however.

 Parameters

  force:false if the window's close handler should be able to veto the destruction of this window, true if it cannot.

附錄:

1._T()、wxT()同 MFC 。

2.大部分程式會重載wxApp中與OnInit()對應的OnExit()來釋放資源:

int WxDBApp::OnExit()

{   

    return wxApp::OnExit();

}

此函數隻在OnInit()傳回true時調用。

3.SetIcon(GetIconResource(wxT("../MyWx/wfx.ico")));

xpm

繼續閱讀