Answer

专注于Mobile,WinCE
  首页  :: 新随笔  :: 联系 :: 管理

wxWidgets工程配置

Posted on 2009-03-12 15:43  answer  阅读(944)  评论(0编辑  收藏  举报

wxWidgets工程配置

// * 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

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了。。。