打开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
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
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两个文件,也可以改变一下书写顺序。