1. 程式人生 > >wxWidgets教程01:第一個程式 HelloWorld

wxWidgets教程01:第一個程式 HelloWorld

本節將會手動編寫建立一個最簡單的wxWidgets程式,該程式不做任何事情,只是一個窗體。寫的比較細,包括部分原始碼及執行原理,希望可以徹底理解!

1. Frame和Dialog的區別

一般情況下,有選單工具欄的是Frame,沒有的是Dialog。當然這是一般情況,因為你完全可以把Dialog做成Frame樣子。Frame一般用做主窗體,可以有選單、工具欄、狀態列。Dialog用做模式視窗,可以返回不同的值,比如打開個設定對話方塊、確認對話方塊等等。用一個圖片來說明:


wxWidgets(以下簡稱wx)程式必需包涵一個頂級窗體,而wx只有兩個頂級窗體就是wxFrame和wxDialog,所以我們和程式裡面必需有一個wxFrame或是wxDialog。

2. 程式入口

以我們的經驗,C/C++的入口就是main函式。wx中入口函式當然也是main,只是main函式已經在wx庫中被定義好了,不需要再重新定義了。可以從原始碼wx/app.h中找到main函式被定義在巨集wxIMPLEMENT_WXWIN_MAIN中:

    #define wxIMPLEMENT_WXWIN_MAIN_CONSOLE                                    \
        int main(int argc, char **argv)                                       \
        {                                                                     \
            wxDISABLE_DEBUG_SUPPORT();                                        \
                                                                              \
            return wxEntry(argc, argv);                                       \
        }

IMPLEMENT_APP(app)巨集呼叫了wxIMPLEMENT_WXWIN_MAIN並且完成了許多wx初始化的工作,所以在我們的程式中,只需加上IMPLEMENT_APP(OurApp)作為入口即可,前處理器會自動替換……

3. 初始化

上面的IMPLEMENT_APP巨集接受一個wxApp在型別,即OurApp必需是wxApp型別或wxApp的派生型別,所以我們先定義一個繼承自wxApp的類OurApp:

#include <wx/wx.h>

class OurApp: public wxApp
{

};

IMPLEMENT_APP(OurApp)
wxApp實際是在wx/app.h中宣告的,也可以使用#include <wx/app.h>,wx/wx.h中包括了大部分常用的wx標頭檔案,在後面的程式中如果你不知道該include誰,最簡單的辦法就是include wx/wx.h

IMPLEMENT_APP中會呼叫wxApp的OnInit方法,窗體的初始化工作應該放在這裡進行:

    // Called before OnRun(), this is a good place to do initialization -- if
    // anything fails, return false from here to prevent the program from
    // continuing. The command line is normally parsed here, call the base
    // class OnInit() to do it.
    virtual bool OnInit();
我們只需在OurApp中實現這個方法即可:
#include <wx/wx.h>

class OurApp: public wxApp
{
    bool OnInit()
    {
      //init
    }
};

IMPLEMENT_APP(OurApp)
返回true代表正常,後續的OnRun和OnExit會被呼叫;返回false程式將退出

4. 建立Frame

前面說到,我們必需至少有一個Frame或Dialog,這裡我們將建立wxFrame

先看wxFrame建構函式宣告:

wxFrame::wxFrame( wxWindow *  parent,
        wxWindowID      id,
        const wxString &    title,
        const wxPoint &     pos = wxDefaultPosition,
        const wxSize &      size = wxDefaultSize,
        long    style = wxDEFAULT_FRAME_STYLE,
        const wxString &    name = wxFrameNameStr 
    )  
最簡單的方案,我們可以只提供三個引數:parent, id, title
wxFrame* frame = new wxFrame(NULL, wxID_ANY, "Our First App"));
parent是NULL, 沒有父窗體(因為它是頂級窗體),wxID_ANY(其實就是-1)表示讓wx安排一個ID(wx中的各控制元件用ID來識別)


5. 合成

So,終於可以合成出完成的一個程式了:

#include <wx/wx.h> 
 
class OurApp : public wxApp
{
    bool OnInit()
    {
        wxFrame* frame = new wxFrame(NULL, wxID_ANY, "Our First App"); 
        frame->Show();
        return true;
    }
 
 
};
 
 
IMPLEMENT_APP(OurApp)
frame->Show()就不解釋了,太明顯了!
編譯、執行就O了:

相關推薦

wxWidgets教程01第一程式 HelloWorld

本節將會手動編寫建立一個最簡單的wxWidgets程式,該程式不做任何事情,只是一個窗體。寫的比較細,包括部分原始碼及執行原理,希望可以徹底理解! 1. Frame和Dialog的區別 一般情況下,有選單工具欄的是Frame,沒有的是Dialog。當然這是一般情況,因為

Java (二)第一程式HelloWorld

      我們都知道java是跨平臺的,所說的跨平臺就是指可以在不同得平臺環境上執行,win7,win8,win10,xp,mark等,在不同得平臺上執行就要安裝不同的執行工具JRE,JDK是開發工具它裡面包含了JRE。 1.安裝好開發工具JDK 2.在

《Linux C程式設計一站式學習》——第一程式HelloWorld.c

1、首先確保linux系統下安裝了gcc編譯器,使用vim編寫一個簡單的C程式: 2、儲存退出,用gcc命令編譯,預設會生成a.out可執行檔案,如果要生成指定名稱的檔案,需要加入-o  appname  引數: 3、執行程式; 4、對於程式中出現的一些警告,gcc編

Java的第一程式HelloWorld

2018年11月10日 12:01:09 LuckyShawn 閱讀數:4 標籤: Java

Servlet實現我的第一程式HelloWorld

用myeclipse建立web專案,編寫servlet。部署後,啟動Tomcat伺服器。 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.ht

SpringMVC 的第一程式——HelloWorld

SpringMVC 的HelloWorld 1.什麼是SpringMVC?   Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。Spring 框架提供了構建 Web 應用程式的全功能 MVC

Java實現我的第一程式HelloWorld

public class HelloWorld { public static void main(String[] args){//程式的入口 System.out.print("Hello

用匯編寫的第一程式---helloworld.asm

 DATA         SEGMENT                            ;資料段定義開始 NUMBER       DB        'hello,world!',0AH,0DH   ;被顯示得字串 DATA         ENDS       

笨辦法學Python筆記-習題1第一程式

習題1:第一個程式 執行python  test1.py報錯: SyntaxError:Missing parentheses in call to 'print' 修改後: 執行結果: 問

【 D3.js 入門系列 --- 1 】 第一程式HelloWorld

下面開始用D3.js處理第一個簡單問題,先看下面的程式碼:  <html> <head> <meta charset="utf-8"&g

Struts2入門第一程式HelloWorld

俗話說萬事開頭難,只要入了門什麼都好說!今天我就來帶看我部落格的朋友們入struts2的門 一、首先我們要下載struts2(去官網www.apache.org找struts2的下載)如圖: 選擇下載即可。這樣我們就完成了第一步,現在我們有了struts2的軟體了,先解壓來

android的第一程式helloworld (有圖有真相)

1、建立工程 2、都不需要編寫程式碼 非常簡單  AndroidhelloActivity.java package com.mrjing.org; import android.app.Activity; import android.os.Bundle; pub

學習筆記(第一程式HelloWorld的解釋)

關鍵字,主函式的概念 class Demo {   public static void main(String[] args)   {     System.out.println("hellow java");   } } 1、在我們這個類中,Demo稱之為類名,cl

WebGL簡易教程(一)第一簡單示例

目錄 1. 概述 2. 示例:繪製一個點 1) HelloPoint1.html 2) HelloPoint1.js (1) 準備工作 (2) 著色器 (3)

WebGL簡易教程(六)第一三維示例(使用模型檢視投影變換)

目錄 1. 概述 2. 示例:繪製多個三角形 2.1. Triangle_MVPMatrix.html 2.2. Triangle_MVPMatrix.js 2.2.1. 資料加入Z值

LeetCode初級演算法--排序和搜尋01第一錯誤的版本

LeetCode初級演算法--排序和搜尋01:第一個錯誤的版本 搜尋微信公眾號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多演算法、機器學習乾貨 csdn:https://blog.csdn.net/baidu_31657889/ csdn:https://blog.csdn.net/ab

安卓學習筆記 -- (安裝環境) Android Studio安裝配置、環境搭建詳細步驟及基本使用 Android Studio和SDK官方開發工具下載 Android Studio教程從入門到精通 Android開發-之第一程式HelloWorld

1、下載Android Studio安裝配置、環境搭建詳細步驟及基本使用    https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html https://blog.csdn.net/k491022087/ar

Ogre學習教程Ogre第一程式

1. 已經安裝了Ogre工程嚮導,VS2010 新建專案就可以看得OGRE的工程模版了,建立一個空專案,由於安裝了Orge工程助手,所以免去了麻煩的配置過程(安裝Orge工程助手步驟可以參考 Ogre1.8.1+VS2010環境配置): 2. 首先在專案中建立一個

Java環境變數設定後,編寫第一程式報錯找不到或無法載入主類 D:\java\HelloWorld

Java 環境變數配置完後,按照網上說的辦法測試都成功了,但在寫第一個HelloWorld程式時,編譯通過了,執行時報“找不到或無法載入主類 D:\java\HelloWorld”錯誤。 網上解決辦法 程式設計時習慣地認為一個執行命令後面一般跟的是一

快應用入門第一快應用程式

簡介 快應用是九大手機廠商基於硬體平臺共同推出的新型應用生態,依附在各大應用市場。使用者無需下載安裝,即點即用,享受原生應用的效能體驗。2018年3月20日在北京推出“快應用”標準。該應用模組以標準js語法+重組css標籤+Flexbox佈局+mvvm模式。 第一