打開vs2017,新建一個空項目
1、在vc++目錄->包含目錄添加(也可以用相對地址)
D:\wxWidgetsTest\wxWidgets-3.1.3\wxWidgets-3.1.3\include
D:\wxWidgetsTest\wxWidgets-3.1.3\wxWidgets-3.1.3\lib\vc_lib\mswud
2、在鏈接器-》常規-》附加庫目錄添加
D:\wxWidgetsTest\wxWidgets-3.1.3\wxWidgets-3.1.3\lib\vc_li
3、在鏈接器-》輸入-》附加依賴項添加
wxbase31ud_net.lib
wxmsw31ud_html.lib
wxbase31ud_xml.lib
wxmsw31ud_adv.lib
wxmsw31ud_aui.lib
wxmsw31ud_gl.lib
wxmsw31ud_media.lib
wxmsw31ud_propgrid.lib
wxmsw31ud_qa.lib
wxmsw31ud_ribbon.lib
wxmsw31ud_richtext.lib
wxmsw31ud_stc.lib
wxmsw31ud_xrc.lib
wxscintillad.lib
wxmsw31ud_core.lib
wxbase31ud.lib
wxtiffd.lib
wxjpegd.lib
wxpngd.lib
wxzlibd.lib
wxexpatd.lib
winmm.lib
comctl32.lib
rpcrt4.lib
wsock32.lib
odbc32.lib
4、由於我們生成一個控制檯空程序的時候,默認入口是main(),但是wx把main進行了分裝,所以會提示找不到的錯誤。
error LNK2019: 無法解析的外部符號 _main該符號在函數
解決:在鏈接器-系統-子系統下控制檯改爲窗口。
5、新建一個main.cpp輸入以下的內容,運行
#include <wx/wx.h>
class Simple : public wxFrame//繼承自wxframe
{
public:
Simple(const wxString& title);//4進入構造函數
};
Simple::Simple(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150))
{
Centre();
}
class MyApp : public wxApp//2進入這裏,再次只需要實現oninit就可以
{
public:
virtual bool OnInit();
};
IMPLEMENT_APP(MyApp)//調用wxIMPLEMENT_WXWIN_MAIN,程序入口
bool MyApp::OnInit()//3
{
Simple *simple = new Simple(wxT("Simple"));//創建窗口
simple->Show(true);//顯示窗口
return true;
}
6、以上就是運行的窗口,什麼都沒有,但是已經是一個框架了。
7程序解釋:
1、程序由IMPLEMENT_APP(MyApp)進入
2、然後進入MyApp類的構造函數,這裏是默認的構造,所以接着進入父類wxApp的構造函數
3、在wxApp的構造函數裏面多態調用OnInit()方法,這裏運行“
Simple *simple = new Simple(wxT("Simple"));實例化窗口類
4、Simple 的構造函數調用Centre(),對對話框進行居中,其他的沒有做,正常情況下可以在這裏設置菜單、工具欄等操作。
5、返回調用 simple->Show(true);//顯示窗口
6、ok,也可以將這個分拆成.h.cpp等文件,記得添加頭文件#include <wx/wx.h>
7、將Simple 的構造函數修改如下,添加菜單
Simple::Simple(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150))
{
wxMenuBar *mbar = new wxMenuBar;
wxMenu *menu = new wxMenu();
wxMenuItem *mitem1 = new wxMenuItem(nullptr, wxID_ANY,"open");
wxMenuItem *mitem2 = new wxMenuItem(nullptr, wxID_ANY, "close");
menu->Append(mitem1);
menu->Append(mitem2);
mbar->Append(menu, "file");
SetMenuBar(mbar);
Centre();
}
8、添加一個按鈕和一個顯示控件,就在 SetMenuBar(mbar);和 Centre();之間
wxButton *btn = new wxButton(this, wxID_ANY, "button",wxPoint(0,0),wxSize(50,20));
wxTextCtrl *tcl = new wxTextCtrl(this, wxID_ANY, "",wxPoint(100, 0), wxSize(50, 20));
9、點擊一下按鈕,顯示控件顯示helloworld。
將上面的wxTextCtrl *tcl修改一下,定義成成員變量。
定義一個響應函數,修改Simple類如下
class Simple : public wxFrame//繼承自wxframe
{
public:
wxTextCtrl *tcl;//成員變量
void hello(wxCommandEvent &e);//響應函數
Simple(const wxString& title);//4進入構造函數
};
定義hello函數
void Simple::hello(wxCommandEvent &e) {
tcl->SetValue("Hello World!");
}
在8的兩行代碼之後添加消息綁定函數 Bind(wxEVT_BUTTON, &Simple::hello,this);
運行結果。
如果提示有tcl或者hello沒有定義,是因爲編譯順序,可以將將代碼分成h和cpp兩個文件,也可以改變一下書寫順序。