从编译wxWidget到在VC6中创建工程项目步骤

. 编译

例子工程代码: http://download.csdn.net/source/3188860

根据你自己的安装目录来定

C:/wxWidgets 2.8.0/build/msw 目录,分别输入如下命令行:

清理: mingw32-make -f makefile.gcc clean

Releasemingw32-make -f makefile.gcc MONOLITHIC=0 SHARED=1 UNICODE=1 BUILD=release

Debug mingw32-make -f makefile.gcc MONOLITHIC=0 SHARED=1 UNICODE=1 BUILD=debug 

 

1.1 VC编译器:

// Unicode 发布动态版 (生成的文件在vc_dll)

nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1

nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=0 UNICODE=1

 

// Unicode 发布静态版 (生成的文件在vc_lib)

nmake -f makefile.vc BUILD=release SHARED=0 MONOLITHIC=1 UNICODE=1

nmake -f makefile.vc BUILD=release SHARED=0 MONOLITHIC=0 UNICODE=1

 

// Unicode 调试动态版 (生成的文件在vc_dll)

nmake -f makefile.vc BUILD=debug SHARED=1 MONOLITHIC=1 UNICODE=1

nmake -f makefile.vc BUILD=debug SHARED=1 MONOLITHIC=0 UNICODE=1

 

// Unicode 调试静态版(生成的文件在vc_lib)

nmake -f makefile.vc BUILD=debug SHARED=0 MONOLITHIC=1 UNICODE=1

nmake -f makefile.vc BUILD=debug SHARED=0 MONOLITHIC=0 UNICODE=1

 

// 多字节发布动态版(生成的文件在vc_dll)

nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=0

nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=0 UNICODE=0

 

// 多字节发布静态版 (生成的文件在vc_lib)

nmake -f makefile.vc BUILD=release SHARED=0 MONOLITHIC=1 UNICODE=0

nmake -f makefile.vc BUILD=release SHARED=0 MONOLITHIC=0 UNICODE=0

 

// 多字节调试动态版 (生成的文件在vc_dll)

nmake -f makefile.vc BUILD=debug SHARED=1 MONOLITHIC=1 UNICODE=0

nmake -f makefile.vc BUILD=debug SHARED=1 MONOLITHIC=0 UNICODE=0

 

// 多字节调试静态版 (生成的文件在vc_lib)

nmake -f makefile.vc BUILD=debug SHARED=0 MONOLITHIC=1 UNICODE=0

nmake -f makefile.vc BUILD=debug SHARED=0 MONOLITHIC=0 UNICODE=0

 

// BUILD=debug/release               调试版/发布版

// SHARED=1/0               编译成动态库/静态库

// MONOLITHIC=1/0          生成一个dll/生成一个静态库对应一个dll

// UNICODE=1/0                        Unicode/多字节版

 

还有很多其他选项, 慢慢理解吧

 

编译好后, C:/wxWidgets 2.8.0/lib目录生成对应的文件和目录

SHARED=1   生成vc_dll目录 该目录下有对应的libdll文件, 还有对应的setup.h文件, 该文件VC中需要.

SHARED=0   生成vc_lib目录 该目录下有对应的lib, 还有对应的setup.h文件, 该文件VC中需要 vc_lib lib文件时静态链接时使用.

. 创建VC工程使用wxWidget

http://hi.baidu.com/mingyueye/blog/item/c8b2ab0f04e2f7e8ab64575f.html

wxWidgets 是跨平台的GUI库,用VC6会影响它的跨平台性吗?当然不会,我们只是用VC6充当编译器和编辑器,只要编写代码时注意不使用Windows相关的特性,写出的代码仍然是跨平台的,仍然是可以在其它操作系统下(如Linux)使用其它C++编译器(如GCC)编译并运行的。

2.1创建VC工程

点击菜单:File -> New... 创建一个“Win32 Application Project,项目名称为“wxProject”,点击OK按钮,

在下一步的提示中选择“An Empty Project”,点击Finish按钮完成项目的创建。

 

2.2设置编译的版本Debug/Release/…

我这里设置了有3个选项可以组合, 他们的配置是不同的

Win32 Debug                                    // 多字节 动态链接 调试版

Win32 Release                                   // 多字节 动态链接 发布版

Win32 Unicode Debug                        // Unicode 动态链接 调试版

Win32 Unicode Release                       // Unicode 动态链接 发布版

Win32 Debug Static                            // 多字节 静态链接 调试版

Win32 Release Static                          // 多字节 静态链接 发布版

Win32 Unicode Debug Static               // Unicode 静态链接 调试版

Win32 Unicode Release Static              // Unicode 静态链接 发布版

添加这些可以在VC菜单 Build | Configurations 中配置.

 

2.2.1 Win32 Debug // 多字节 动态链接 调试版

Win32 Debug

C/C++ | General:        

Preprocessor definitions:

WIN32,_DEBUG,__WXMSW__,WXUSINGDLL,__WXDEBUG__,_MBCS,_WINDOWS,NOPCH

C/C++ | Code Generation:

Use run-time library:

Debug Multithreaded DLL

C/C++ | Preprocessor

       Additional include directories:

              $(MyWxWidgets)/include,$(MyWxWidgets)/lib/vc_dll/mswd

 

Link | General:

Object/library modules:

wxmsw28d_xrc.lib wxmsw28d_html.lib wxmsw28d_adv.lib wxmsw28d_core.lib wxbase28d_xml.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.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 odbc32.lib

Link | Input

       Additional library path:

              $(MyWxWidgets)/lib/vc_dll

 

其中:     __WXMSW__ 告诉wxWidget这是在Window系统中使用.

              WXUSINGDLL 告诉VC 使用动态链接(运行时需要dll).

              __WXDEBUG__ 告诉wxWidget这是调试版本.

              $(MyWxWidgets) 这是wxWidget的安装目录, 在这里设置成系统环境变量, 并把其设置到VC工程中而不设置在VC工具中(避免换电脑时重新设置.可以参考文章 关于VC的一些路径设置问题(h文件和lib文件的路径)”)

 

2.2.2 Win32 Release // 多字节 动态链接 发布版

Win32 Release

C/C++ | General:        

Preprocessor definitions:

WIN32,NDEBUG,_WINDOWS,_MBCS,__WXMSW__,WXUSINGDLL,NOPCH

C/C++ | Code Generation:

Use run-time library:

Multithreaded DLL

C/C++ | Preprocessor

       Additional include directories:

              $(MyWxWidgets)/include,$(MyWxWidgets)/lib/vc_dll/msw

 

Link | General:

Object/library modules:

wxmsw28_xrc.lib wxmsw28_html.lib wxmsw28_adv.lib wxmsw28_core.lib wxbase28_xml.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.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 odbc32.lib

Link | Input

       Additional library path:

              $(MyWxWidgets)/lib/vc_dll

 

2.2.3 Win32 Unicode Debug // Unicode 动态链接 调试版

Win32 Unicode Debug

C/C++ | General:        

Preprocessor definitions:

WIN32,_DEBUG,__WXMSW__,__WXDEBUG__,WXUSINGDLL,_UNICODE,_WINDOWS,NOPCH

C/C++ | Code Generation:

Use run-time library:

Debug Multithreaded DLL

C/C++ | Preprocessor

       Additional include directories:

              $(MyWxWidgets)/include,$(MyWxWidgets)/lib/vc_dll/mswud

 

Link | General:

Object/library modules:

wxmsw28ud_xrc.lib wxmsw28ud_html.lib wxmsw28ud_adv.lib wxmsw28ud_core.lib wxbase28ud_xml.lib wxbase28ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.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 odbc32.lib

Link | Input

       Additional library path:

              $(MyWxWidgets)/lib/vc_dll

 

 

2.2.4 Win32 Unicode Release    // Unicode 动态链接 发布版

Win32 Unicode Release

C/C++ | General:        

Preprocessor definitions:

WIN32,NDEBUG,_WINDOWS,NOPCH,_UNICODE,__WXMSW__,WXUSINGDLL

C/C++ | Code Generation:

Use run-time library:

Multithreaded DLL

C/C++ | Preprocessor

       Additional include directories:

              $(MyWxWidgets)/include,$(MyWxWidgets)/lib/vc_dll/mswu

 

Link | General:

Object/library modules:

wxmsw28u_xrc.lib wxmsw28u_html.lib wxmsw28u_adv.lib wxmsw28u_core.lib wxbase28u_xml.lib wxbase28u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.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 odbc32.lib

Link | Input

       Additional library path:

              $(MyWxWidgets)/lib/vc_dll

 

 

其他版本照着做就可以了. 要注意的地方就是 静态链接vc_dll 改为vc_lib, 还有就是WXUSINGDLL不需要.

 

2.3创建wxWidgets预编译头文件

各个编译器不同,有的支持预编译头文件,有的不支持,支持预编译头文件的,使用的语法也有所不同,如果在每个源文件中都重复的写未免不爽,还是集中到一个头文件中来比较好。但是注意,有了此文件并不决定或限制你使用还是不使用预编译头文件,用不用以及怎么用还是在你。

点击菜单 File -> New...,新建一个C/C++头文件 wx_pch.h,其内容如下:

 

// wx_pch.h

#pragma once

#if(defined(USE_PCH) && !defined(WX_PRECOMP))

       #define WX_PRECOMP

#endif// USE_PCH

 

/*

// basic wxWidgets headers

#include<wx/wxprec.h>

// for use xrc files

#include<wx/xrc/xmlres.h>

#include <wx/app.h>

*/

// basic wxWidgets headers

#include <wx/wxprec.h>

 

#ifdef __BORLANDC__

#pragma hdrstop

#endif

 

 

#include <wx/wx.h>

#include <wx/dc.h>

#include <wx/listctrl.h>

#include <wx/stattext.h>

#include <wx/textctrl.h>

#include <wx/srchctrl.h>

#include <wx/statline.h>

#include <wx/choice.h>

#include <wx/radiobut.h>

#include <wx/dynarray.h>

#include <wx/grid.h>

#include <wx/aui/aui.h>

#include <wx/splitter.h>

 

 

#ifndef WX_PRECOMP

       #include<wx/wx.h>

#endif

 

#ifdef USE_PCH

// put here all your rarely-changing header files

#endif// USE_PCH

 

 

wxWidgets官方文档是大概也是这样推荐

 

创建wxApp子类

 

点击菜单 Insert -> New Class...,新建一个名称为“CBaseApp”的类(类名称可以随意),此操作将生成文件 BaseApp.h BaseApp.cpp

VC在这里生成的类代码显然是不满足我们的要求的,需要进行以下修改:BaseApp.h

增加预编译头文件 wx_pch.h 的包含(以后创建的每个.h文件都要包含它):#include"wx_pch.h"

指定App类的父类为wxApp:即将“class App”修改为“class App :public wxApp

为类增加虚方法OnInit()的声明:virtual bool OnInit();

在类声明的下方增加 wxWidgets App 声明:DECLARE_APP(App)

最终 app.h 的内容如下

 

// BaseApp.h: interface for the CBaseApp class.//

//

#if !defined(AFX_BASEAPP_H__0AD39875_90C3_42E6_AF12_91C7FBA61B7B__INCLUDED_)

#define AFX_BASEAPP_H__0AD39875_90C3_42E6_AF12_91C7FBA61B7B__INCLUDED_

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

#include "wx_pch.h"

 

class CBaseApp : public wxApp

{

public:

       CBaseApp();

       virtual ~CBaseApp();

       virtual bool OnInit();

};

DECLARE_APP(CBaseApp)

 

#endif // !defined(AFX_BASEAPP_H__0AD39875_90C3_42E6_AF12_91C7FBA61B7B__INCLUDED_)

 

//

增加头文件包含(此头文件将在下面创建MainFrame类时创建):#include"mainframe.h"

增加 OnInit() 方法的定义(其中用到的MainFrame类定义于mainframe.h,见后文)

// BaseApp.cpp

// BaseApp.cpp: implementation of the CBaseApp class.

//

//

 

#include "BaseApp.h"

#include "MainFrame.h"

 

IMPLEMENT_APP(CBaseApp)

//

// Construction/Destruction

//

CBaseApp::CBaseApp()

{}

 

CBaseApp::~CBaseApp()

{}

 

bool CBaseApp::OnInit()

{

       CMainFrame* mainFrame = new CMainFrame(NULL, _("MainFrameby liigo.com"));

       mainFrame->Show();

       SetTopWindow(mainFrame);

       return true;

}

 

 

2.4 创建wxFrame子类

点击菜单 Insert -> New Class...,新建一个名称为“CMainFrame”的类(类名称可以随意).

此操作将生成文件 MainFrame.h MainFrame.cpp

下面对VC生成的类代码进行相应的修改:

MainFrame.h

增加预编译头文件的包含:#include"wx_pch.h"

指定CMainFrame类的父类为wxFrameclass CMainFrame :public wxFrame

修改构造函数的声明:MainFrame(wxWindow*parent,const wxString&title);

在类定义的末尾增加事件表声明:DECLARE_EVENT_TABLE()

最终 MainFrame.h 的内容如下:

// MainFrame.h: interface for the CMainFrame class.//

//

#if !defined(AFX_MAINFRAME_H__7A6D7ABF_9D22_4DCD_B256_9543B6FB022B__INCLUDED_)

#define AFX_MAINFRAME_H__7A6D7ABF_9D22_4DCD_B256_9543B6FB022B__INCLUDED_

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

#include"wx_pch.h"

class CMainFrame : public wxFrame

{

public:

       CMainFrame(wxWindow*parent, const wxString&title);

       virtual ~CMainFrame();

       DECLARE_EVENT_TABLE()

};

#endif // !defined(AFX_MAINFRAME_H__7A6D7ABF_9D22_4DCD_B256_9543B6FB022B__INCLUDED_)

 

/

MainFrame.cpp

修改构造函数的定义:

CMainFrame:: CMainFrame (wxWindow*parent,const wxString&title) :wxFrame(parent,wxID_ANY,title)

{

   //wxTextCtrl* text = new wxTextCtrl(this, wxID_ANY, _("some text"));}

增加事件表定义(BEGIN_EVENT_TABLE END_EVENT_TABLE 之间保留空白,留待以后绑定事件):

BEGIN_EVENT_TABLE(CMainFrame,wxFrame)

END_EVENT_TABLE()

 

最终 MainFrame.cpp 的内容如下

// MainFrame.cpp: implementation of the CMainFrame class.

//

//

#include "MainFrame.h"

//

// Construction/Destruction

//

BEGIN_EVENT_TABLE(CMainFrame, wxFrame)

END_EVENT_TABLE()

 

CMainFrame::CMainFrame(wxWindow*parent,const wxString& title)

       : wxFrame(parent, wxID_ANY, title)

{}

 

CMainFrame::~CMainFrame()

{}

 

2.5 执行结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值