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模式。 第一