引言:
wxWidget的环境配置其实就是,将wxWidget的库头文件、静态库、动态库、引入你的工程、另外配置一些 wxWidget 特定的预处理宏定义。所以在你看到这个环境配置的时候不要想得太复杂,另外如果你配置完后,编译测试程序是如果出现错误,那么主要是如下两种情况导致:
1、特定的宏没有预定义, 你要看你自己使用了哪些特殊的库,来判断增加了。
2、使用的静态库或动态库没有引入,同上根据自己的使用情况去增加。
3、如果你编译通过了,但是运行提示 xxxx.dll 找不到,那就是由于 dll 文件没有放到 运行目录下(一般release 后 库文件是要和 .exe 在一起的), 当然如果你不想再编码的时候总是去移动的话,可以选择在工程属性 >> 配置属性 >> 调试 >> 工作目录 >> 设置你自己的存放 库文件(*.lib *.dll) 的路径。
正文: vs2010 配置最基本的 GUI 环境
1、wxWidget 下载,
1.1 可以到wxWidget 官网 http://www.wxwidgets.org/downloads/ 下载源码
1.2 sourceForge 下载现成的编译好的库 http://sourceforge.net/projects/wxwindows/files/2.9.4/binaries/ ,注意这里要下载 一个 头文件的包和一个库文件的包如:wxWidgets-2.9.4_Headers.7z+wxMSW-2.9.4_vc100_Dev.7z
2、vs2010 创建一个空工程,个人建议工程文件结构:
wxWidget
>>project //存放工程文件
>> lib //存放引用库文件,比如现在的 wxWidget ,我是将 wxWidgets-2.9.4_Headers.7z 包中的include 和wxMSW-2.9.4_vc100_Dev.7z >> vc100_dl 下的所有文件和 放在lib下。
>> src //你自己的头文件
>> out //工程的输出文件 如 .exe
3、配置工程
3.1 工程 >> 属性 >> 配置属性 >> 常规 >> 输出目录 >> 设置上面的 out 目录 ( 可选操作)
3.2 工程 >> 属性 >> 配置属性 >> c/c++ (如果没有这个选项,请先添加一个cpp文件就有了) >> 常规 >> 附加包含目录 >> 设置 wxWidget 的 头文件所在目录 (include目录)路径、wxWidget库文件所在目录下的 mswu / mswud (多个d代表debug)
如果你是在第二步中将 wxWidget 包按我的方式放的。就是 添加 1、 你的工程路径/wxWidget/lib/mswu 和 你的工程路径/wxWidget/lib/include
3.3 工程 >> 属性 >> 配置属性 >> c/c++ (如果没有这个选项,请先添加一个cpp文件就有了) >> 预处理器 >> 预处理定义 添加 _WINDOWS 和 WXUSINGDLL
3.4 工程 >> 属性 >> 配置属性 >> 连接器 >> 附加库目录 >> 增加 .dll 和 .lib 文件所在目录, 我是 你的工程路径/wxWidget/lib
3.5 工程 >> 属性 >> 配置属性 >> 连接器 >> 输入 >> 附加依赖项 >> 添加 wxmsw29ud_core.lib wxbase29ud.lib
3.6 工程 >> 属性 >> 配置属性 >> 连接器 >> 系统 >> 子系统 >> 窗口系统
4、测试代码:
// wxWidgets "Hello world" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
class MyApp: public wxApp
{
public:
virtual bool OnInit();
};
class MyFrame: public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:
void OnHello(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
wxDECLARE_EVENT_TABLE();
};
enum
{
ID_Hello = 1
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Hello, MyFrame::OnHello)
EVT_MENU(wxID_EXIT, MyFrame::OnExit)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );
frame->Show( true );
return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, wxID_ANY, title, pos, size)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append(ID_Hello, "&Hello…\tCtrl-H",
"Help string shown in status bar for this menu item");
menuFile->AppendSeparator();
menuFile->Append(wxID_EXIT);
wxMenu *menuHelp = new wxMenu;
menuHelp->Append(wxID_ABOUT);
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, "&File" );
menuBar->Append( menuHelp, "&Help" );
SetMenuBar( menuBar );
CreateStatusBar();
SetStatusText( "Welcome to wxWidgets!" );
}
void MyFrame::OnExit(wxCommandEvent& event)
{
Close( true );
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxMessageBox( "This is a wxWidgets' Hello world sample",
"About Hello World", wxOK | wxICON_INFORMATION );
}
void MyFrame::OnHello(wxCommandEvent& event)
{
wxLogMessage("Hello world from wxWidgets!");
}
编译运行 就可以看到一个含菜单,状态栏的 frame 了