[wxWidgets]二、配置运行环境和第一个自己的程序

打开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该符号在函数

解决:在链接器-系统-子系统下控制台改为窗口。

[wxWidgets]二、配置运行环境和第一个自己的程序_第1张图片

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;
}

[wxWidgets]二、配置运行环境和第一个自己的程序_第2张图片

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();
}

 

[wxWidgets]二、配置运行环境和第一个自己的程序_第3张图片

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));

[wxWidgets]二、配置运行环境和第一个自己的程序_第4张图片

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);

运行结果。

[wxWidgets]二、配置运行环境和第一个自己的程序_第5张图片

如果提示有tcl或者hello没有定义,是因为编译顺序,可以将将代码分成h和cpp两个文件,也可以改变一下书写顺序。

你可能感兴趣的:(wxwidgets)