zyzx的小窝

C/C++,GUI,个人移动存储,zyzx_lsl@163.com

 

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

       系统:子系统:未设置、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了。。。

posted on 2009-03-11 17:42 zyzx 阅读(5948) 评论(2)  编辑 收藏 引用 所属分类: wxWidgets界面库

评论

# re: wxWidgets工程配置 2009-10-23 09:24 zh

我的是在:Win32平台配置的,是按照你的配置一步步的跟着来的,但是出现了错误:错误如下:

正在链接...
LINK : error LNK2001: 无法解析的外部符号 _无
helloworld.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall wxString::wxString(char const *)" (__imp_??0wxString@@QAE@PBD@Z) ,该符号在函数 "public: bool __thiscall HelloWorld::Create(class wxWindow *,int,class wxString const &,class wxPoint const &,class wxSize const &,long)" (?Create@HelloWorld@@QAE_NPAVwxWindow@@HABVwxString@@ABVwxPoint@@ABVwxSize@@J@Z) 中被引用
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxFrameNameStr" (__imp_?wxFrameNameStr@@3QBDB)
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxStatusBarNameStr" (__imp_?wxStatusBarNameStr@@3QBDB)
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxToolBarNameStr" (__imp_?wxToolBarNameStr@@3QBDB)
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxComboBoxNameStr" (__imp_?wxComboBoxNameStr@@3QBDB)
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxButtonNameStr" (__imp_?wxButtonNameStr@@3QBDB)
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxTextCtrlNameStr" (__imp_?wxTextCtrlNameStr@@3QBDB)
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxStaticTextNameStr" (__imp_?wxStaticTextNameStr@@3QBDB)
helloworld.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * const wxEmptyString" (__imp_?wxEmptyString@@3PBDB)
helloworld.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall wxClassInfo::wxClassInfo(char const *,class wxClassInfo const *,class wxClassInfo const *,int,class wxObject * (__cdecl*)(void))" (__imp_??0wxClassInfo@@QAE@PBDPBV0@1HP6APAVwxObject@@XZ@Z) ,该符号在函数 _$E1 中被引用
project1app.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall wxClassInfo::wxClassInfo(char const *,class wxClassInfo const *,class wxClassInfo const *,int,class wxObject * (__cdecl*)(void))" (__imp_??0wxClassInfo@@QAE@PBDPBV0@1HP6APAVwxObject@@XZ@Z)
project1app.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall wxAppConsole::OnAssert(char const *,int,char const *,char const *)" (?OnAssert@wxAppConsole@@UAEXPBDH00@Z)
project1app.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall wxAppConsole::OnAssertFailure(char const *,int,char const *,char const *,char const *)" (?OnAssertFailure@wxAppConsole@@UAEXPBDH000@Z)
project1app.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall wxApp::Initialize(int &,char * *)" (?Initialize@wxApp@@UAE_NAAHPAPAD@Z)
Debug/helloworld.exe : fatal error LNK1120: 14 个无法解析的外部命令

生成日志保存在“file://e:\jiemian\helloworld\Debug\BuildLog.htm”中
helloworld - 16 错误,0 警告
请问是什么原因,能否帮我解答,先谢谢了  回复  更多评论   

# re: wxWidgets工程配置 2009-10-25 01:05 zyzx

你的工程应该是动态编译的,检查下导入库是否完整。重要的一条预处理选项WXUSINGDLL,这个选项动态编译必须的。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

常用链接

搜索

最新评论

阅读排行榜

评论排行榜