// * create by zyzx
// * 2009-3-11
// * 转载请注明来源:http://www.cppblog.com/zyzx
wx库编译相对简单些,配置起来说难也不算很难,但比较麻烦。有比较多的地方需要注意。在其wiki上面有比较多的篇幅讲解如何使用vs来配置工程,但熟悉起来还是需要一段时间。
wiki上的配置向导:http://wiki.wxwidgets.org/Guides_%26_Tutorials
依照上一篇编译说明将wx库编译好了,建立了目录库。
我们再设置如下编译环境。
Win32平台配置
VC配置属性:
常规:
MFC的使用:使用标准Windows库
C/C++:
常规:附加包含目录:..\wxlib\include ..\wxlib\debug\mswud
预处理器:WIN32;_DEBUG;__WXMSW__;__WXDEBUG__;_WINDOWS;WXUSINGDLL
代码生成:运行时库:MDD
链接器:
常规:附加库目录:..\wxlib\debug
输入:wxbase28ud.lib wxmsw28ud_core.lib wxmsw28ud_xrc.lib wxbase28ud_xml.lib wxmsw28ud_adv.lib wxmsw28ud_aui.lib wxmsw28ud_html.lib rpcrt4.lib winmm.lib comctl32.lib advapi32.lib oleacc.lib
系统:子系统:未设置、Windows (/SUBSYSTEM:WINDOWS)
高级:入口点:无
WXUSINGDLL标签表明wx是用动态库的方式引入。MFC库是否引入,看个人的需求,基本上使用wx是不再用MFC的。
附加库中尝试时可以将所有的..\wxlib\*.lib加入进来,然后分别根据使用情况分别剔除某些lib文件。
关于运行时库,最好要和编译wx库保持一致(这里默认MDD),不然可能出现编译错误。
最后运行成果时,别忘了把*.dll文件也拷贝到可执行程序文件夹中去。
WinCE平台设置
VC配置属性:
常规:
MFC的使用:使用标准Windows库
C/C++:
常规:附加包含目录:..\wxCELib\include ..\wxCELib\debug\winced
预处理器定义:_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);
WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);
_UNICODE;UNICODE;__WXWINCE__;NOPCH;wxNO_EXCEPTIONS
代码生成:MTD
链接器:
附加库目录:..\wxCELib\debug
输入:wx_mono.lib wx_wxexpat.lib wx_wxjpeg.lib wx_wxpng.lib wx_wxzlib.lib wcelibcex.lib
命令行:附加选项: /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE
系统:子系统:未设置
高级:入口点:无
wcelibcex.lib是补全部分WinCE上SDK缺失的部分函数库,搜索wcelibcex(下载)字样,即可找到相应的1.0源代码,编译后添加到我们自己的开发库目录下。
编程时注意在WinCE上很多窗口特性,并不完全与Win32环境相同。包括窗口的组织结构都有细微的差别。
并不是所有wx库窗口组件都兼容到WinCE,但基础常用的组件还是没有多大的问题的。
好了,有了这些,就可以尝试最经典的wx程序了。
1#include "wx/wx.h"
2using namespace std;
3class MyApp:public wxApp
4{
5 public:
6 vrtual bool OnInit();
7};
8class MyFrame:public wxFrame
9{
10public:
11 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) ;
12
13 void OnQuit(wxCommandEvent& event);
14 void OnAbout(wxCommandEvent& event);
15
16 DECLARE_EVENT_TABLE()
17};
18enum
19{
20 ID_Quit = 1,
21 ID_About,
22};
23
24BEGIN_EVENT_TABLE(MyFrame, wxFrame)
25EVT_MENU(ID_Quit, MyFrame::OnQuit)
26EVT_MENU(ID_About, MyFrame::OnAbout)
27END_EVENT_TABLE()
28
29IMPLEMENT_APP(MyApp)
30
31bool MyApp::OnInit()
32{
33 MyFrame *frame = new MyFrame( wxT("Hello World"), wxPoint(50,50), wxSize(450,340) ) ;
34 frame->Show(TRUE);
35 SetTopWindow(frame);
36 return TRUE;
37}
38
39MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
40 : wxFrame((wxFrame *)NULL, -1, title, pos, size)
41{
42#ifndef _WIN32_WCE
43 wxMenu *menuFile = new wxMenu;
44
45 menuFile->Append( ID_About, wxT("&About") ) ;
46 menuFile->AppendSeparator();
47 menuFile->Append( ID_Quit, wxT("E&xit") ) ;
48
49 wxMenuBar *menuBar = new wxMenuBar;
50 menuBar->Append( menuFile, wxT("&File") ) ;
51
52 SetMenuBar( menuBar ) ;
53
54 CreateStatusBar();
55 SetStatusText( wxT("Welcome to wxWindows!") ) ;
56#enif
57}
58
59void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
60{
61 Close(TRUE);
62}
63
64void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
65{
66 wxMessageBox(wxT("This is a wxWindows Hello world sample"),
67 wxT("About Hello World"), wxOK | wxICON_INFORMATION, this) ;
68}
很遗憾wxMenuBar在WinCE上运行是有些问题的,CreateStatusBar()也是不能再WinCE上运行,或许不久会解决这些问题。不过,基础的wxMenu、wxWindow却是可以的,有这些组建复杂的界面也不难。
呵呵,,如果通过编译并正确运行,,。。。^V^,,,就OK了。。。