【wxWidgets】最簡(jiǎn)單的窗口

開(kāi)發(fā)環(huán)境

系統(tǒng) IDE wxWidgets版本
Win7 VS2015 3.1.1

搭建請(qǐng)看 【配置】VS2015下wxWidgets 3.1.1開(kāi)發(fā)環(huán)境
逐步追加代碼讹躯,理解wxWidgets結(jié)構(gòu)。
想簡(jiǎn)單的拖拉控件請(qǐng)用 wxFormBuilder乌庶。
可以看wxWidgets wiki 入門(mén)教程果元。

1、最簡(jiǎn)單的窗口
#if defined(_WIN32) || defined(_WIN64)
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#define wxMSVC_VERSION_AUTO 
#define WXUSINGDLL  //動(dòng)態(tài)鏈接
//#define __WXMSW__
//#define wxUSE_GUI 1
#endif

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif


class MainApp : public wxApp {
public:
    virtual bool OnInit();
};

wxIMPLEMENT_APP(MainApp);  //綁定程序入口

bool MainApp::OnInit() {
    //wxWindow *parent, wxWindowID id, const wxString &title,
    wxFrame *mframe = new wxFrame(NULL,wxID_ANY,L"最簡(jiǎn)單的窗口"); //這就是一個(gè)窗口
    mframe->Show(true); //顯示窗口
    return true;
}
2腾降、動(dòng)態(tài)添加菜單

#if defined(_WIN32) || defined(_WIN64)
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
//#define __WXMSW__
#define wxMSVC_VERSION_AUTO 
#define WXUSINGDLL  //動(dòng)態(tài)鏈接
//#define wxUSE_GUI 1

#endif

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif


class MainApp : public wxApp {
public:
    virtual bool OnInit();

};

wxIMPLEMENT_APP(MainApp);

enum 
{
    ID_OPEN = wxID_HIGHEST + 1, //為避免與wxWidgets本身預(yù)定義的ID重復(fù)拣度,可加wxID_HIGHEST
};


bool MainApp::OnInit() {
    //wxWindow *parent, wxWindowID id, const wxString &title,
    wxFrame *mframe = new wxFrame(NULL,wxID_ANY,L"最簡(jiǎn)單的窗口");

    wxMenu *menuFile = new wxMenu;      //菜單項(xiàng)
    menuFile->Append(ID_OPEN, L"打開(kāi)");   //添加菜單子項(xiàng)

    wxMenuBar *menuBar = new wxMenuBar; //菜單欄
    menuBar->Append(menuFile,L"文件");    //控件、菜單項(xiàng)字符

    mframe->SetMenuBar(menuBar);        //設(shè)置菜單欄到窗口

    mframe->Show(true);

    return true;
}


3螃壤、添加菜單處理
#if defined(_WIN32) || defined(_WIN64)
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
//#define __WXMSW__
#define wxMSVC_VERSION_AUTO 
#define WXUSINGDLL  //動(dòng)態(tài)鏈接
//#define wxUSE_GUI 1

#endif

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif


class MainApp : public wxApp {
public:
    virtual bool OnInit();

};

wxIMPLEMENT_APP(MainApp);

enum 
{
    ID_OPEN = wxID_HIGHEST + 1, //為避免與wxWidgets本身預(yù)定義的ID重復(fù)抗果,可加wxID_HIGHEST
};


void menu_item_open(wxCommandEvent& event) {
    wxLogMessage(L"菜單“打開(kāi)”被點(diǎn)擊");
}

bool MainApp::OnInit() {
    //wxWindow *parent, wxWindowID id, const wxString &title,
    wxFrame *mframe = new wxFrame(NULL,wxID_ANY,L"最簡(jiǎn)單的窗口");

    wxMenu *menuFile = new wxMenu;      //菜單項(xiàng)
    menuFile->Append(ID_OPEN, L"打開(kāi)");   //添加菜單子項(xiàng)

    wxMenuBar *menuBar = new wxMenuBar; //菜單欄
    menuBar->Append(menuFile,L"文件");    //控件、菜單項(xiàng)字符

    mframe->SetMenuBar(menuBar);        //設(shè)置菜單欄到窗口

    // 綁定處理function : 事件類(lèi)型 wxEVT_MENU 奸晴、function地址窖张、id
    mframe->Bind(wxEVT_MENU, menu_item_open, ID_OPEN);  

    mframe->Show(true);

    return true;
}

4、添加文本控件
#if defined(_WIN32) || defined(_WIN64)
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
//#define __WXMSW__
#define wxMSVC_VERSION_AUTO 
#define WXUSINGDLL  //動(dòng)態(tài)鏈接
//#define wxUSE_GUI 1

#endif

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif


class MainApp : public wxApp {
public:
    virtual bool OnInit();

};

wxIMPLEMENT_APP(MainApp);

enum 
{
    ID_OPEN = wxID_HIGHEST + 1, //為避免與wxWidgets本身預(yù)定義的ID重復(fù)蚁滋,可加wxID_HIGHEST
    ID_TEXT,
};


void menu_item_open(wxCommandEvent& event) {
    wxLogMessage(L"菜單“打開(kāi)”被點(diǎn)擊");
}

bool MainApp::OnInit() {
    //wxWindow *parent, wxWindowID id, const wxString &title,
    wxFrame *mframe = new wxFrame(NULL, wxID_ANY,L"最簡(jiǎn)單的窗口");

    wxMenu *menuFile = new wxMenu;      //菜單項(xiàng)
    menuFile->Append(ID_OPEN, L"打開(kāi)");   //添加菜單子項(xiàng)

    wxMenuBar *menuBar = new wxMenuBar; //菜單欄
    menuBar->Append(menuFile,L"文件");    //控件、菜單項(xiàng)字符

    mframe->SetMenuBar(menuBar);        //設(shè)置菜單欄到窗口

    // 綁定處理function : 事件類(lèi)型 wxEVT_MENU 赘淮、function地址辕录、id
    mframe->Bind(wxEVT_MENU, menu_item_open, ID_OPEN);  





    wxTextCtrl *ptextCtrl = new wxTextCtrl(mframe, ID_TEXT); //new 一個(gè)文本控件

    /*多行文本控件
    wxTextCtrl *ptextCtrl = new wxTextCtrl(mframe, ID_TEXT,wxT(""),wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE);
    
    //wxT(""):初始文本
    //wxDefaultPosition(默認(rèn)坐標(biāo)): 是控件坐標(biāo),也可以用wxPoint (int x, int y);
    //wxDefaultSize(默認(rèn)大猩倚丁): 控件大小走诞,wxSize (int width, int height)
    //wxTE_MULTILINE:多行
    */


    /*
    https://wiki.wxwidgets.org/Adding_A_Control 上有句話(huà)
    The call to Layout() is there because windows doesn't always send a size-event at the right moment for wxWidgets to catch in an OnSize handler (where it calls Layout() itself).
    Layout()發(fā)送個(gè)size事件,添加個(gè)別控件時(shí)免得布局不正確蛤高。在這里注釋了也一樣蚣旱。
    */
    mframe->Layout(); 




    mframe->Show(true);
    
    return true;
}

官方教程,有個(gè)設(shè)置文本風(fēng)格:

text->SetDefaultStyle(wxTextAttr(*wxRED));
text->AppendText("Red text\n");
text->SetDefaultStyle(wxTextAttr(wxNullColour, *wxLIGHT_GREY));
text->AppendText("Red on grey text\n");
text->SetDefaultStyle(wxTextAttr(*wxBLUE);
text->AppendText("Blue on grey text\n");

我嘗試用來(lái)切換單行戴陡、多行塞绿,沒(méi)反應(yīng)。

5恤批、添加一個(gè)按鈕

代碼重復(fù)太多异吻,這里只貼出上面的代碼修改部分,對(duì)照修改就可以。


enum 
{
    ID_OPEN= wxID_HIGHEST + 1,
    ID_TEXT,
    ID_BUT, //按鈕ID
};

bool MainApp::OnInit() {
    //wxWindow *parent, wxWindowID id, const wxString &title,
    wxFrame *mframe = new wxFrame(NULL, wxID_ANY,L"最簡(jiǎn)單的窗口");

    wxMenu *menuFile = new wxMenu;      //菜單項(xiàng)
    menuFile->Append(ID_OPEN, L"打開(kāi)");   //添加菜單子項(xiàng)

    wxMenuBar *menuBar = new wxMenuBar; //菜單欄
    menuBar->Append(menuFile,L"文件");    //控件诀浪、菜單項(xiàng)字符

    mframe->SetMenuBar(menuBar);        //設(shè)置菜單欄到窗口

    // 綁定處理function : 事件類(lèi)型 wxEVT_MENU 棋返、function地址、id
    mframe->Bind(wxEVT_MENU, menu_item_open, ID_OPEN);  
    
    //多行文本
    wxTextCtrl *ptextCtrl = new wxTextCtrl(mframe, ID_TEXT,wxT(""),wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE);
    
    //添加按鈕
    wxButton *but = new wxButton(mframe, ID_BUT,wxT("BUT"), wxPoint(100,100));

    mframe->Layout();

    mframe->Show(true);
    
    return true;
}

為按鈕添加處理事件

mframe->Bind(wxEVT_BUTTON,處理函數(shù)(function), ID_BUT)

處理函數(shù)(function)雷猪,例如:

void ButHandle(wxCommandEvent& event) {
    //你想觸發(fā)的代碼
    wxLogMessage(L"");
}
6睛竣、添加窗口布局wxBoxSizer
bool MainApp::OnInit() {
    //wxWindow *parent, wxWindowID id, const wxString &title,
    wxFrame *mframe = new wxFrame(NULL, wxID_ANY,L"最簡(jiǎn)單的窗口");

    wxMenu *menuFile = new wxMenu;      //菜單項(xiàng)
    menuFile->Append(ID_OPEN, L"打開(kāi)");   //添加菜單子項(xiàng)

    wxMenuBar *menuBar = new wxMenuBar; //菜單欄
    menuBar->Append(menuFile,L"文件");    //控件、菜單項(xiàng)字符

    mframe->SetMenuBar(menuBar);        //設(shè)置菜單欄到窗口

    // 綁定處理function : 事件類(lèi)型 wxEVT_MENU 求摇、function地址射沟、id
    mframe->Bind(wxEVT_MENU, menu_item_open, ID_OPEN);  
    
    //多行文本
    wxTextCtrl *ptextCtrl = new wxTextCtrl(mframe, ID_TEXT,wxT(""),wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE);
    
    //添加按鈕
    wxButton *but = new wxButton(mframe, ID_BUT,wxT("BUT"));

    //窗口布局wxBoxSizer
    wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
    sizer->Add(ptextCtrl);  //wxBoxSizer處理文本控件布局
    sizer->Add(but);        //wxBoxSizer處理按鈕控件布局
    sizer->SetSizeHints(mframe); //讓wxFrame適配大小
    mframe->SetSizer(sizer); //為wxFrame設(shè)置wxBoxSizer

    mframe->Layout();

    mframe->Show(true);
    
    return true;
}

wxVERTICAL是布局方向。wxBoxSizer只是相當(dāng)于給控件加上座位月帝,按座位落座躏惋,sizer->Add是指定控件受wxBoxSizer布局管理,mframe->SetSizer(sizer)才正式生效嚷辅。

至于SetSizeHints簿姨,我們看圖:


設(shè)置SetSizeHints
沒(méi)有設(shè)置SetSizeHints

由此可見(jiàn),這是讓wxFrame適配wxBoxSizer大小簸搞,否則雖然控件交由wxBoxSizer布局扁位,但窗口大小沒(méi)有跟隨改變。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趁俊,一起剝皮案震驚了整個(gè)濱河市域仇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寺擂,老刑警劉巖暇务,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異怔软,居然都是意外死亡垦细,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)挡逼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)括改,“玉大人,你說(shuō)我怎么就攤上這事家坎≈瞿埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵虱疏,是天一觀(guān)的道長(zhǎng)惹骂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)做瞪,這世上最難降的妖魔是什么析苫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上衩侥,老公的妹妹穿的比我還像新娘国旷。我一直安慰自己,他們只是感情好茫死,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布跪但。 她就那樣靜靜地躺著,像睡著了一般峦萎。 火紅的嫁衣襯著肌膚如雪屡久。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天爱榔,我揣著相機(jī)與錄音被环,去河邊找鬼。 笑死详幽,一個(gè)胖子當(dāng)著我的面吹牛筛欢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唇聘,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼版姑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了迟郎?” 一聲冷哼從身側(cè)響起剥险,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宪肖,沒(méi)想到半個(gè)月后表制,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡控乾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年么介,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱持。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖魔熏,靈堂內(nèi)的尸體忽然破棺而出衷咽,到底是詐尸還是另有隱情,我是刑警寧澤蒜绽,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布镶骗,位于F島的核電站,受9級(jí)特大地震影響躲雅,放射性物質(zhì)發(fā)生泄漏鼎姊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望相寇。 院中可真熱鬧慰于,春花似錦、人聲如沸唤衫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佳励。三九已至休里,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赃承,已是汗流浹背妙黍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞧剖,地道東北人拭嫁。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像筒繁,于是被迫代替她去往敵國(guó)和親噩凹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評(píng)論 25 707
  • 愛(ài)情總是很相似 你愛(ài)我 我愛(ài)你 情愛(ài)的世界很復(fù)雜 執(zhí)念只有一個(gè) 愛(ài)你 愛(ài)我 情毡咏,一瞬間驮宴,閃過(guò) 愛(ài),一剎那呕缭,飄去 寫(xiě)...
    麾毛桿兒閱讀 165評(píng)論 0 1
  • 工作日志 周一到周三去了秦皇島堵泽,參加姚明見(jiàn)面會(huì),話(huà)不多說(shuō)恢总,先上圖 所收任務(wù) 完成地表水自動(dòng)監(jiān)測(cè):實(shí)時(shí)一覽功能模塊 ...
    錢(qián)佳辰_Hangzhou閱讀 108評(píng)論 2 0
  • ?房研社聯(lián)盟—秦川:大家有沒(méi)有改聊天背景?沒(méi)改的可以自己試試,白色背景眼睛太難受了 ?怪木西西 :@秦川—房研社聯(lián)...
    西瓜會(huì)閱讀 1,041評(píng)論 0 1
  • 1. 開(kāi)始→程序→Microsoft Word→選“模板”→確定→選“演示文稿設(shè)計(jì)”卡片→“彩暈型模板” →“確定...
    木諾閱讀 531評(píng)論 0 13