// * create by zyzx
// * 2009-3-11
// * 轉載請注明來源:http://www.shnenglu.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"
2
using namespace std;
3
class MyApp:public wxApp
4

{
5
public:
6
vrtual bool OnInit();
7
};
8
class MyFrame:public wxFrame
9

{
10
public:
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
};
18
enum
19

{
20
ID_Quit = 1,
21
ID_About,
22
};
23
24
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
25
EVT_MENU(ID_Quit, MyFrame::OnQuit)
26
EVT_MENU(ID_About, MyFrame::OnAbout)
27
END_EVENT_TABLE()
28
29
IMPLEMENT_APP(MyApp)
30
31
bool 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
39
MyFrame::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
59
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
60

{
61
Close(TRUE);
62
}
63
64
void 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了。。。