VS2010配置wxWidgets开发环境(窗口程序和控制台程序详细说明)

http://www.wxwidgets.org/downloads/各个版本的下载,如果有兴趣自己编译可以尝试

http://sourceforge.net/projects/wxwindows/files/2.9.4/binaries/ 已经编译好的2.9.4版本,包括debug和release版本

既然有已经下载好的,直接拿来用就行了

wxWidgets-2.9.4_Headers.7z,头文件是必须要的,解压到某个目录  .../wxWidgets-2.9.4-vc100/

wxMSW-2.9.4_vc100_Dev.7z 解压同一个目录,这里面包含了wx/setup.h头文件,链接库,动态库,也分release和debug库(带d)

头文件和库准备好后,就可以开始配置VS2010环境了

一、新建工程New Project

建议选择Win32 Console Applictaion,路径工程名什么的自选

Application type应用程序类型可以选择 Windows application或console application(新建之后可以再更改设置)

选择空工程就行了

二、配置头文件

此时是一个空工程,没有什么头文件和源文件

一般配置头文件就是选择工程属性(Properties),在空工程的情况下Configuration Properties下面没有C/C++这一项

只需要新加一个源文件,Add NewItem 比如hello_wxWidgets.cpp,再进入属性就会出现C/C++这一项了

Additional Include Directories(添加头文件目录),注意要添加两个地方

一个就是wxWidgets-2.9.4_Headers.7z解压后的.../wxWidgets-2.9.4-vc100/include目录,这里面包含了wxWidgets所包含的头文件

另一个就是wxWidgets-2.9.4/lib/vc100_dll下的mswu(或mwsud),里面包含了wx/setup.h头文件。在wxwidgets-2.9.4\include\wx\platform.h中引用了

Prepocesser(预编译项)

  • WIN32 - Required
  • __WXMSW__ - Required
  • _WINDOWS - Required
  • WXUSINGDLL - If you're compiling using DLLs instead of a static build
  • wxUSE_GUI=1 - Add this for projects using GUI components (optional)
  • _UNICODE - Add this if you are using Unicode (note that this definition may be inherited from a project default - see note below)
  • _DEBUG - Enables debugging
  • _SCL_SECURE_NO_WARNINGS=1
  • NOPCH
  • _CRT_SECURE_NO_DEPRECATE - Add this if you want to suppress "This function or variable may be unsafe. Consider using <alternative> instead." warnings.
  • _CRT_NONSTDC_NO_DEPRECATE - Suppresses other warnings.
由于用到的是动态库,WXUSINGDLL是必须的  _WINDOWS这个就不重要了,之后会讲到
其他的一般用默认就行了,可以根据需要设置
二、配置链接选项
Linker选项
主要包括两个:一是链接库所有路径,二是链接库名称
General 在路径添加Additional Library Directories,加个库所有的目录即可...\lib\vc100_dll
Input 添加依赖库Additional Dependencies
wxmsw29ud_stc.lib
wxmsw29ud_adv.lib
wxmsw29ud_core.lib
wxbase29ud.lib

wxmsw29ud_webview.lib
wxscintillad.lib
wxtiffd.lib
wxjpegd.lib
wxpngd.lib
wxzlibd.lib
wxregexud.lib
wxexpatd.lib
kernel32.lib
user32.lib
gdi32.lib
comdlg32.lib
winspool.lib
winmm.lib
shell32.lib
comctl32.lib
ole32.lib
oleaut32.lib
uuid.lib
rpcrt4.lib
advapi32.lib
wsock32.lib
wininet.lib

根据需要添加
配置完后确定即可

三、测试使用
当然还是使用helloworld
// 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!");
}

如果之前建的是Windows application,直接编译运行就可以成功了,当然还需要把链接库对应的动态库放到可执行文件目录下。

四、Windows application与Console application
在Application type不管是选择 Windows application或console application都不重要,可以在属性里面切换
还是在LInker选项下,System下面有个SubSystem选项,可以Windows或Console,要么不选(not set),最好是不选(见核心编程进程那一章)
我觉得不选最方便 
注意这个宏
wxIMPLEMENT_APP(MyApp);
#define wxIMPLEMENT_APP(appname)            \
    wxIMPLEMENT_WX_THEME_SUPPORT            \
    wxIMPLEMENT_APP_NO_THEMES(appname)
#define wxIMPLEMENT_APP_CONSOLE(appname)    \
    wxIMPLEMENT_WXWIN_MAIN_CONSOLE          \
    wxIMPLEMENT_APP_NO_MAIN(appname)
#define IMPLEMENT_APP(app)                      wxIMPLEMENT_APP(app);
#define IMPLEMENT_APP_CONSOLE(app)              wxIMPLEMENT_APP_CONSOLE(app);

IMPLEMENT_APP(app)      IMPLEMENT_APP_CONSOLE(app)这两个定义入口函数的方法
对于Windows application当然是用IMPLEMENT_APP(app) ,如果想通过Console窗口显示一些打印信息就不行了
如果要打印一些信息,最好是选择IMPLEMENT_APP_CONSOLE(app)

int WINAPI _tWinMain(
		HINSTANCE hInstanceExe,
		HINSTANCE,
		PTSTR pszCmdLine,
		int nCmdShow);
int _tmain(int argc, TCHAR *argv[], TCHAR *envp[]);
选择Not Set,指定IMPLEMENT_APP或IMPLEMENT_APP_CONSOLE就可以了。

5.资源文件
在wxWidgets-2.9.4\include\wx\msw下有一些资源文件,如果要在项目中用到,需要添加资源文件wx.rc
直接在Resource Files下面Add Exist Item,把wx.rc文件添加进去即可
不过还要设置wx.rc中所包括的文件路径,可以直接查看资源文件的代码(code模式)就能看到
同样是选择属性,在Resouces General Additional Include Directories下面添加即可,主要是wxWidgets的include目录

如果出现与wx/msw/wx.manifest文件发生冲突的错误,把这个包含项去掉就行了

如需转载,请注明出处,谢谢




你可能感兴趣的:(Studio,Visual,2010,windows窗口程序,Console程序)