UI界面框架调研报告 ——Wxwidgets

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014252666/article/details/52679271

背景:我们在OSGEARTH上的项目已经快要完成,但苦于还没有找到一个合适的界面框架去和交互。在界面框架方面,qt已经做的成熟了,但我们考虑到一些问题,不打算用qt来做这个界面,于是便对一些现有的界面框架做了一些调研分析,首先便是Wxwidgets。

关键词:界面框架;Wxwidgets

一、 什么是Wxwidgets

wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。wxWidgets除了可以用于开发“有界面”的程序,还提供对图形、多媒体、网络等常见领域应用的支持。

wxWidgets是开源的,无论对于个人还是对于商业应用都是免费的。wxWidgets可以支持现今几乎所有操作系统,包括对掌上电脑的支持。wxWidgets社区快速稳健成长,其周边工具也越来越多。wxWidgets支持各种主流的编译器,通过“重新编译”的方式支持软件的移植。wxWidgets尽可能的使用目标系统“原生的”的GUI样式,界面与环境异常和谐。

二、 Wxwidgets的下载和安装

1.wxWidgets的官网在http://www.wxwidgets.orgs/,下载页面是http://www.wxwidgets.org/downloads/。作为Windows用户,从下载页面下载如下画圈的两个文件。Windows.ZIP是wxWidgets的源代码,Manual(HTML).zip则是在学习过程中最重要的参考。


2.下载后,将文件Windows.ZIP解压缩到X:/wxWidgets-3.0.0中,X代表你选择的盘符。

3.进入X:\wxWidgets-3.0.0\build\msw中VS2010打开wx.dsw,等待工程从VC6VS2010的转换完成。

 

4.右击解决方案,点击批生成,勾选所有DebugRelease(可根据需要选择),点击生成进行编译。


5.编译成功后,wxWidgets-3.0.0\lib\vc_lib目录如下所示,已生成所需库文件,其中u表示Release版本,ud表示Debug版本。


三、 vs下的配置

1. 新建Win32控制台应用程序,应用程序类型勾选Windows应用程序或控制台应用程序。新建源文件test.cc,粘贴以下代码。

// wxWidgets "Hello world" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
class MyApp : public wxApp
{
public:
         virtual bool OnInit();
};
class MyFrame : public wxFrame
{
public:
         MyFrame(const wxString&title, const wxPoint& pos, const wxSize& size);
private:
         voidOnHello(wxCommandEvent& event);
         voidOnExit(wxCommandEvent& event);
         void OnAbout(wxCommandEvent&event);
         wxDECLARE_EVENT_TABLE();
};
enum
{
         ID_Hello = 1
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Hello, MyFrame::OnHello)
EVT_MENU(wxID_EXIT, MyFrame::OnExit)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
         //MyFrame *frame = newMyFrame("Hello World", wxPoint(50, 50), wxSize(450, 340));
         MyFrame *frame = newMyFrame("Hello World", wxDefaultPosition, wxDefaultSize);
         frame->Show(true);
         return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, constwxSize& size)
: wxFrame(NULL, wxID_ANY, title, pos, size)
{
         wxMenu *menuFile = newwxMenu;
         menuFile->Append(ID_Hello,"&Hello...\tCtrl-H",
                   "Help stringshown in status bar for this menu item");
         menuFile->AppendSeparator();
         menuFile->Append(wxID_EXIT);
         wxMenu *menuHelp = newwxMenu;
         menuHelp->Append(wxID_ABOUT);
         wxMenuBar *menuBar = newwxMenuBar;
         menuBar->Append(menuFile,"&File");
         menuBar->Append(menuHelp,"&Help");
         SetMenuBar(menuBar);
         CreateStatusBar();
         SetStatusText("Welcometo wxWidgets!");
}
void MyFrame::OnExit(wxCommandEvent& event)
{
         Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
         wxMessageBox("This is awxWidgets' Hello world sample",
                   "About HelloWorld", wxOK | wxICON_INFORMATION);
}
void MyFrame::OnHello(wxCommandEvent& event)
{
         wxLogMessage("Helloworld from wxWidgets!");
}


2.包含目录:右击项目,打开项目属性页,配置一项选择所有配置配置属性->C/C++->常规->附加包含目录 中添加:

C:\wxWidgets-3.0.0\include

C:\wxWidgets-3.0.0\lib\vc_lib\mswu

3.添加库目录:配置属性->链接器->常规->附加库目录 中添加:

C:\wxWidgets-3.0.0\lib\vc_lib 

4.MFC的使用:配置属性->MFC的使用:使用标准Windows库

5. 添加依赖项:配置属性->链接器->输入->附加依赖项按照如下规则添加:

A、配置一项改为Release

wxbase30u.lib

wxbase30u_net.lib

wxbase30u_xml.lib

wxexpat.lib

wxjpeg.lib

wxmsw30u_adv.lib

wxmsw30u_aui.lib

wxmsw30u_core.lib

wxmsw30u_gl.lib

wxmsw30u_html.lib

wxmsw30u_media.lib

wxmsw30u_propgrid.lib

wxmsw30u_qa.lib

wxmsw30u_ribbon.lib

wxmsw30u_richtext.lib

wxmsw30u_stc.lib

wxmsw30u_xrc.lib

wxpng.lib

wxregexu.lib

wxscintilla.lib

wxtiff.lib

wxzlib.lib

comctl32.lib

rpcrt4.lib

B 配置一项改为Debug

wxbase30ud_net.lib

wxmsw30ud_html.lib

wxbase30ud_xml.lib

wxmsw30ud_adv.lib

wxmsw30ud_aui.lib

wxmsw30ud_gl.lib

wxmsw30ud_media.lib

wxmsw30ud_propgrid.lib

wxmsw30ud_qa.lib

wxmsw30ud_ribbon.lib

wxmsw30ud_richtext.lib

wxmsw30ud_stc.lib

wxmsw30ud_xrc.lib

wxscintillad.lib

wxmsw30ud_core.lib

wxbase30ud.lib

wxtiffd.lib

wxjpegd.lib

wxpngd.lib

wxzlibd.lib

wxexpatd.lib

winmm.lib

comctl32.lib

rpcrt4.lib

wsock32.lib

odbc32.lib

6.预处理器定义:

配置一项改为Debug

配置属性->C/C++->预处理器->预处理器定义 中添加:

__WXMSW__

__WXDEBUG__

      

7.保存运行,运行结果如下:

四、 Wxwidgets的优势和不足

优势:

1Wxwidgets无论对于个人还是对于商业应用都是免费的!

2、 他是跨平台的gui库,支持的操作系统很全面,甚至支持pda(最新版本3.0.1支持iOS,可以在下载的源码包中找到wxWidgets-3.0.1.tar.bz2\wxWidgets-3.0.1\build\osx\wxiphone.xcodeproj)。

3wxwidgets提供的gui是大量使用宏的,这就意味着它是在尽可能的使用目标系统nativegui样式。

4、 它支持的编译器也很多,而且borland也曾声明将在c++builderx2里边提供对wxidgets的支持——预览版都出来了。

不足:

首先官方文档不全(至少我觉得个官方的help远远不够我的菜鸟需求,大部分都是网络上零散的教程),对STL的支持不够,特别是没有源代码的开发速度快;没有强大全面的rad工具;还没有形成很浓的产业气候,等等。

 

五、 前景与可行性

相比MFCwxWidgets有着跨平台和开源免费的优势;相比QtwxWidgets的语法是完全C++的,不像Qt的Q_OBJECT宏需要用moc单独编译出一cpp文件再编译。使用wxWidgets开发的程序有很多,比较著名的有跨平台3D游戏0.A.D, 集成编程工具Code::Blocks和CodeLite,文件传输工具filezilla。类似于Qt的QtDesigner界面编译器,wxWidgets也有相应的界面开发工具,如wxSmithwxFormBuilder,有着非常友好人机交互界面,实现界面可视化开发。但是,Wxwidgets的界面框架是跟随系统特征的,太过单一,如果要实现与系统不一致的框架,需要非常复杂的实现机制。

    

猜你喜欢

转载自blog.csdn.net/u014252666/article/details/52679271