当前位置:首页 » 股票涨停 » wxwigets股票软件

wxwigets股票软件

发布时间: 2021-07-15 12:20:42

『壹』 wxwidgets 下载

我编程,我快乐!——人人都能学好编程。

| 首页 | 教程 | 辅助教程 | 关于作者 | 本站软件 | 论坛 | CSDN博客 | 帮助 |

--------------------------------------------------------------------------------

白话C++
2.2. 安装wxWidgets

多数应用软件,通常需要一个界面与使用者进行交互。典型的交互方式可以分成三种:

纯文字界面
也称为“控制台”应用。此类应用通过以“一问一答”的形式在屏幕上打出提问的文字,然后等待用户输入后,程序得以继续运行。 这类交互形式称不上友好,但实现起来简单。在我们学习C++语法的一个很长的时期,我们所写的程序,多数采用此类形式。
图形用户界面
通过“对话框”、“菜单”、“按钮”等典型的图形元素所提供的用户界面。即“图形用户界面/Graphical user interface”,简称为GUI。该形式下,用户通过鼠标或键盘操作,选择所需的功能。 我们常用Office软件、QQ聊天软件、以及Windows操作系统本身,都是典型的GUI程序。
浏览器界面
浏览器界面是GUI的一种特定应用。它将程序分为后台服务和前台展示两部分。后台服务主要实现程序的业务逻辑,以及产生界面脚本(通常是HTML),真正的界面展现与交互工作完全交给第三方的浏览器(比如IE,或Firefox)去完成。 当我们上网浏览新闻时,就是在使用此类应用。
本书前面的一大部分内容,采用“纯文字界面”作为范例程序主要采用界面方式。此安排自然是为了避免读者一开始就陷入复杂的GUI界面设计的“泥潭”之中。然而,与大多数纯粹的C++语言教程止步于此不同,如果编写(跨平台)的“图形用户界面”,也是本书的主要教学内容。

C++的GUI程序库,同样充满很多选择。一些非开源产品多数仅限于某一平台。wxWidgets是同时符合“开源”、“成熟”、“跨平台”,并且支持各平台“原生界面”的GUI库中的佼佼者。这里的“原生界面”是指,在A系统下,其生成的界面元素,就和A系统的本地界面风格一致,这里的A,可以指代Windows XP、也可以指代Linux下某一图形界面。

wxWidgets的主要特点如下:

开源
跨平台:Windows、Mac OS X、GTK+、X11、Motif、WinCE。
既支持原生界面,也支持统一风格界面。
不仅仅是图形界面库:集成提供了包括文件操作、目录操作、多线程、网络通讯、OpenGL(3D)等等功能库。
支持不同的库链接形式:静态链接,动态链接库,其中后者还可以支持编译成单一动态库,或多个小动态库的形式。
支持UNICODE:编译时,可以编译出UNICODE或非UNICODE两种版本,本书采用UNICODE,以方便编程上对汉字的操作。
发展成熟:有较长的发展历史(起源于1992年),业界有许多基于wxWidgets的成熟应用
学习资源丰富:网络上的可以找到较多的资源。
与Code::Blocks结合紧密:C::B本身正是采用wxWidgets实现跨平台的图形用户界面。另外C::B内置了使用wxWidgets的可视界面设计工具。
支持多种编译器:包括本书采用的开源gcc/g++编译器,也包括Visual C++等商业编译器。
本书配套光盘提供了wxWidgets 2.8.8 版本的安装程序,以及四种编译库。您可以通过查看光盘中对应的说明文件,实现快速安装。

如果您需要更新版本的wxWidgets,或者您只是想学习其编译过程,那么请继续阅读下述内容。

2.2.1. 准备

请通过本小节末尾的“相关网站”链接,上网下载wxWidgets的最新稳定版本。请注意选择为for windows版本。

下载得到的,应是一个可执行的安装程序。与Code::Blocks的安装类似,建议将其安装某个驱动器的根目录下,比如:E:\ wxWidgets-2.8.8 目录下(尾部数字以您所使用的wxWidgets版本为准)。

当然,由于本书将指导您安装多个C++扩展库,因此,如果您愿意建立一个新文件夹,用于作为各个C++扩展库的统一的父文件夹,的确是个好主意。

2.2.2. 编译

上一步安装wxWidgets,仅得到源代码文件及一些说明。我们还需要将其中的源代码编译成“库”文件。此类“库”有很多种形式,但其实都可以称为“预编译库”。意思是:它们已经编译好了,你直接拿去用吧。

我们先简单地了解一下“动态、静态”及“调试、发行”的区别。

“库”通常包含很多功能代码,但它们本身并不能直接运行,而是准备提供给应用程序使用, “动态链接”和“静态链接”代表程序如何找到及使用库功能的两种不同方法。

“静态链接”是指,直接将库文件和程序文件合成一个大文件,在合并过程中,完成对库文件各个功能的定位。这个事情发生程序编译的过程。

“动态链接”与此相反,库文件和程序文件各自独立存在,程序在运行时,才去库文件找相关的功能。

完全使用“静态链接”,我们可能会得到一个“胖胖”的程序,直接发给用户使用就可以了。使用“动态链接”,我们可能需要分发给你的用户多个文件(程序和各个库文件)。不小心弄丢了哪个文件,用户们就要抱怨你的软件“跑”不起来了。

“调试版”和“发行版”就和链接技术无关了。前者表示,二者的区别在于:前者含有调试信息,而后者没有。有调试信息有利于我们纠出程序中的错误,不过既然它的含有额外的信息,所以这样的库肯定“胖”了不少。如果觉得错误纠得差不多了,我们就可以改用相对“苗条”的发行版。

有关“库”的详细知识,我们留在第四章讲。今天我们将把wxWidgets编译译成四种形式:

动态链接库 + 调试版
动态链接库 + 发行版
静态链接库 + 调试版
静态链接库 + 发行版
另外,wxWidgets的编译,还可以区分“UNICODE”及“非 UNICODE”两种式。在多数场合下,“UNICODE”可以对汉字及国际化有较方便的支持。因此以上四种组合,我们全部都加上相同“UNICODE”选项。当然, “非UNICODE”选项倒也不是一无是处,以后我们也会用到。

正式开始编译之前,必须确保已经在电脑上正确安装好mingw32环境,如果您不在确信,请使用2.1.6.1小节中提及的方法进行检测。

静态链接(调试版)
步骤1:打开“开始”菜单:“所有程序→附件→记事本”程序。用它打开 wxWidgets安装目录下,子目录“build\msw\”下面的“config.gcc”文件。

步骤2:找到以下内容,并确保将等号(:=)后面的值如下面加粗内容所示。另外其它未指部分的内容,请保持不变。

步骤3:请确认保存了本步的修改成果,再继续下一步。

# What type of library to build? [0,1]
SHARED := 1

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := debug

步骤4:SHARED 为 0表示要编译的是静态库,而不是动态库(共享库);

UNICODE为1,表示要编译成UNICODE版本,这一项在本次编译过程中始终为1。

BUILD为debug,表示要编译成含有调试信息的版本。

步骤5:打开“开始”菜单,选择“运行”,输入cmd,进入控制台窗口,然后在其内通过cd命令,切换到wxWidgets安装目录下的“build\msw”路径。比如您把wxWidgets 安装在“E:\wxWidgets-2.8.8”,则过程如下:

E: (回车)

cd wxWidgets-2.8.8 (回车)

cd build\msw (回车)

步骤6:在第3步的控制台中,继续输入以下命令:

mingw32-make.exe -f makefile.gcc (回车)

步骤7:这将开始一段长约30分钟的编译过程(视你的机器配置而定)。

静态链接(发行版)
编译过程和前一版本主要差别在于“config.gcc”文件的修改内容:

# What type of library to build? [0,1]
SHARED := 0

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := release

其它操作方法不变。

动态链接(调试版)
编译过程和前一版本主要差别在于“config.gcc”文件的修改内容:

# What type of library to build? [0,1]
SHARED := 1

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := debug

其它操作方法不变。

动态链接(发行版)
编译过程和前一版本主要差别在于“config.gcc”文件的修改内容:

# What type of library to build? [0,1]
SHARED := 1

# Compile Unicode build of wxWidgets? [0,1]
UNICODE := 1

# Type of compiled binaries [debug,release]
BUILD := release

其它操作方法不变。

2.2.3. 结束

这是一次漫长的编译过程,至此,我们完成了四个版本的wxWidgets库的编译。它是我们编写图形用户界面基础。

为了确保大家尽量顺利地完成编译,我们在“config.gcc”仅选择了最基本的编译选项。因此一些强大wxWidgets功能模块没有被编译成库,比如前面提到的非Unicode版,另外没有支持OpenGL、OBDC等功能。后面需要时,我们将会加上,并且令大家放心的是,这并不会带来又一次wxWidgets漫长完全编译。

〖小提示〗:程序员,起来走走……

每次30分钟的编译过程,漫长的等待中,我猜到您不耐烦得站起来四处走动。走动其实健康有益。然而,在程序员的生涯中,我们更多面临的,可能是无数个3分钟,甚至是30秒的等待,这时,你是否记得提醒自己也要常常起来走动走动?

Code::Blocks专门提供一个插件,用于提醒程序员注意休息,很有兴趣?请在休息之后继续我们的白话之旅。

编译过程中会产生大量的中间临时文件。请进入wxWidgets文件夹内的“build”子文件夹,搜索 “*.o”文件(确保选中“搜索子文件夹”选项):约有3千多个中间文件,全部删除,可以腾出1G多的空间。(Windows下多数编译器会生产扩展名为“.obj”的文件,但mingw32-g++产生的为“.o”文件。)

编译完成后,所有静态链接库位于wxWidgets安装目录下的“lib\gcc_lib”子目录。而动态链接库位于 “lib\gcc_dll”子目录。

仔细观察,会发现库文件名称中,有不少带有“ud”字母的文件,其中‘d’表示“debug”,即调试版本 ,不带‘d’的通常是“release”版本。

‘u’表示“Unicode”,即支持Unicode编码。虽然我们这一次编译的全部采用“Unicode”选项,但还是存在一些文件并不带‘u’字母,那是因为这些库并不涉及到字符串的国际化处理,所以不需要考虑编码,比如与Jpeg图形功能有关的库。

静态库文件
libwxbase28u.a
libwxbase28ud.a libwxbase28ud_net.a libwxbase28ud_xml.a
libwxbase28u_net.a libwxbase28u_xml.a libwxexpat.a
libwxexpatd.a libwxjpeg.a libwxjpegd.a
libwxmsw28ud_adv.a libwxmsw28ud_aui.a libwxmsw28ud_core.a
libwxmsw28ud_html.a libwxmsw28ud_media.a libwxmsw28ud_richtext.a
libwxmsw28ud_xrc.a libwxmsw28u_adv.a libwxmsw28u_aui.a
libwxmsw28u_core.a libwxmsw28u_html.a libwxmsw28u_media.a
libwxmsw28u_richtext.a libwxmsw28u_xrc.a libwxpng.a
libwxpngd.a libwxregexu.a libwxregexud.a
libwxtiff.a libwxtiffd.a libwxzlib.a
libwxzlibd.a

动态库文件
wxbase28ud_gcc_custom.dll wxbase28ud_net_gcc_custom.dll
wxbase28ud_xml_gcc_custom.dll wxbase28u_gcc_custom.dll
wxbase28u_net_gcc_custom.dll wxbase28u_xml_gcc_custom.dll
wxmsw28ud_adv_gcc_custom.dll wxmsw28ud_aui_gcc_custom.dll
wxmsw28ud_core_gcc_custom.dll wxmsw28ud_html_gcc_custom.dll
wxmsw28ud_media_gcc_custom.dll wxmsw28ud_richtext_gcc_custom.dll
wxmsw28ud_xrc_gcc_custom.dll wxmsw28u_adv_gcc_custom.dll
wxmsw28u_aui_gcc_custom.dll wxmsw28u_core_gcc_custom.dll
wxmsw28u_html_gcc_custom.dll wxmsw28u_media_gcc_custom.dll
wxmsw28u_richtext_gcc_custom.dll wxmsw28u_xrc_gcc_custom.dll

在gcc_dll目录下,除了扩展名为“.dll”的动态链接库以外,还存在大量的扩展为“.a”的文件,称为“导入库/Import library”,为了节省篇幅,上表未加列出。

“导入库”在编译时向应用程序提供信息,以辅助应用程序在运行时,定位具体某一功能在DLL文件中的入口。也就是说,今后编译程序时,将用到它们,但它们不必随同程序一起发行。

2.2.4. 相关网址

wxWidgets 官方网站:www.wxWidgets.org

wxWidgets扩展代码:www.wxCode.com

『贰』 Qt和wxWidgets哪个好

wxWidgets是开源的, qt不是开源的!
从这个角度思考, 就像windows 和 linux 关系, 你觉得windows和linux谁好? 使用windows的人多,很大的原因是商业营销行为导致的.

我用wxWidgets有多年了,所以给你描述一下关于wxWidgets, 其他人少提及的东西.

wxWidgets其实非常不错, 桌面应用完全能够胜任,效率非常高,内存以及cpu占用很可观,在windows下敢和MFC开发的软件比,在mac os下敢和object-c开发的软件比!

而且并不是说界面和控件的外观就被固定为操作系统本地化的外观, 你完全可以将界面或者控件元素做成任意样式和形状,实现不同平台UI风格的统一化,甚至可以制作多套皮肤,然后在win7,xp,mac下外观和用户体验一个样.

更主要的是,他的源代码是完全开放的. 高阶运用的时候完全可以将某个控件类继承下来, 由于他没有private属性,所以他里面的函数和变量你全都能继承下来,然后照着源代码进行修改和调整,最后变成自己针对性的控件. 反正, 在UI上没他办不到的. 另外,他的界面控件的类是完全指针安全的, 你随便new, 然后不用管, 用完了他自己会回收,完全不用delete,当然也别delete,不然麻烦了.

其他的功能其实他都有提供,比如网络库,容器,OpenGL等等, 如果觉得不理想,比如数据库,可以用www.hnne.com xsqlite, 线程什么的可以用std的线程或者boost的线程,网络如果觉得他的事件机制反应慢, 可以用boost::asio.

社区不活跃,但是你要是在上面提问, 马上就会得到回应(即便是美国的深夜), 如果是bug, 会有人直接联系原作者,非常快的就进行改正,并邮寄通知你,然后发到svn上进行更新.不过主要是英语的响应快, 中文的几乎没人搭理.

bug是存在的, 比较冷的功能和运用可能会有bug, 可以给官方提交,一般一天左右就可以得到响应, 如果不愿意, 反正有源代码, 跟踪一下, 继承下来改改就可以了,wxWidgets是开源的, 而且里面的函数和变量只用public和protected,没有用private, 换句话说, 就是源代码中的所有函数和变量都是可以获取和使用的. 不过,一般的运用是很难碰到bug的. 谁敢说qt没有bug? 遇到qt的bug你找他, 你是付费用户吗?

不过, 移动运用确实是他的短板.

『叁』 有没有在win10安装wxwidgets成功的

可以腾讯电脑管家帮助安装 打开腾讯电脑管家——工具箱——软件管理 软件管理是电脑管家根据当前最新最流行的软件下载情况,向用户推荐的热门软件。每款软件都经过电脑管家运营团队人工测试整理,确保安全可靠,用户可以放心下载。

『肆』 如何使用 wxwidgets开发界面

wxWidgets是一个跨平台的软件开发包。它诞生于1992年,最初的名子是wxWindows,但由于Microsoft的抗议,在2004年改名为wxWidgets。它最初是被设计成跨平台的GUI软件开发包,但后来随着越来越多的人参与进来,为wxWidgets加入了许多非GUI的功能,如多线程(MultiThread)、网络(Network)等。并且从最初的只支持C++语言,逐渐发展成为支持数种语言(如Python、Perl、C#、Basic等)。因此,现在的wxWidgets已经不再是单纯的跨平台的GUI软件开发包,而是一个可以支持多种操作系统平台的能够在多种语言中使用的通用跨平台软件开发包。


由于wxWidgets最开始是为C++而设计的,因此,本文主要讨论了wxWidgets在C++中的使用。


为什么选择wxWidgets?


目前支持C++的软件开发包非常多,比较有名的除了wxWidgets外,还有一些其它的软件开发包,如MFC、QT、ACE等。即然有这么多开发包,那么我们为什么要使用wxWidgets呢?在给出答案之前,让我们首先来看一看上述的三种软件开发包的特性。


1. MFC


MFC是Microsoft提供的软件开发包。MFC虽然十分强大,但它只能运行在Windows下运行。而且它是收费的。


2. QT


QT是由Trolltech 公司开发的一套跨平台软件开发包。它和wxWidgets类似,但是QT只在linux下免费,而在Windows或Unix下使用QT要向Trolltech公司支付版权费。


3. ACE


ACE虽然是免费开源的,但是它没有提供GUI功能。


从以上三个软件开发包可以看出,它们虽然有各自的优势,但是它们或多或少地都会使开发受到限制。而使用wxWidgets将不会有以上所述的问题。wxWidgets和MFC、QT、 ACE的特性对比如表1所示。

注:其中免费中的“是/否”代表QT在linux平台上的Free Edition是免费的,而在windows和unix下使用QT是收费的。而开源中的“是/否”代表QT有一个基于GPL的开源版本,但要进行商业开发,需要使用它的商业版本。


使用wxWidgets编写程序


学习一种编程语言的最好方法就是用它去编写程序,学习wxWidgets也不例外。由于wxWidgets的主要功能是实现跨平台的GUI,因此,本文主要从GUI入手,讨论wxWidgets在C++中如何编写跨平台的应用程序


1. 应用程序类的建立


使用wxWidgets建立系统需要一个类来描述整个应用程序。这个类必须从wxApp类继承。


class MyApp : public wxApp //应用程序类

{

public:

virtual bool OnInit(); // 在应用程序启动时调用,如果返回false,退出应用程序

};

这个类只覆盖了wxApp的一个虚方法OnInit。可以用这个方法在程序启动时做一些验证,如果验证失败,可以通过返回false退出应用程序。当然,由于这个函数是应用程序的入口点,所以建立主窗体的工作要在这个函数中完成。


2. 建立窗体类


wxWidgets中关于窗体的类很多,如果要建立一般窗体的话,可以从wxFrame继承。

class MyFrame : public wxFrame //窗体类

{

public:

MyFrame(const wxString& title); // 窗体的构造函数

};

3. 向窗体中加入控件


在本文中向这个窗体加入了一个菜单条(Menu Bar)、一个状态条、一个Panel和一个按钮。一般我们会在主窗体的构造函数中加入这些控件。


MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title)

{

wxMenu *fileMenu = new wxMenu; // 建立“文件”菜单

wxMenu *helpMenu = new wxMenu; // 建立“帮助”菜单

// 向菜单中添加子项

helpMenu->Append(wxID_ABOUT, _T("关于"tF1"), _T("显示关于对话框"));

fileMenu->Append(wxID_EXIT, _T("退出"tAlt-X"), _T("退出应用程序"));

wxMenuBar *menuBar = new wxMenuBar(); // 建立一个菜单条

menuBar->Append(fileMenu, _T("文件")); //将“文件”菜单加入到菜单条

menuBar->Append(helpMenu, _T("帮助")); //将“帮助”菜单加入到菜单条

SetMenuBar(menuBar); //将菜单条放到窗体上

wxPanel *panel = new wxPanel(this); //建立一个Panel

wxButton *button = new wxButton(panel, wxID_ABOUT, "关于", wxPoint(20, 20), wxSize(50, 30)); //建立一个Button

CreateStatusBar(2); //建立一个两栏的状态栏

SetStatusText(_T("欢迎使用wxWidgets!")); //设置状态栏的文本

在数组sample_xpm中描述了sample.ico的属性和图标本身。如X代表红色; o代表黄色等。然后在源程序中通过include “sample.xpm”引用这个资源文件。要想从这个资源文件中装载图标。可使用SetIcon(wxICON(sample)); wxICON读取资源文件,而SetIcon将这个图标设置为frame的标题栏图标。要想将ico文件转换为这种资源文件,可使用一个免费软件XnView进行转换。


5. 显示主窗体


显示主窗体非常简单,只需要将上面建立的MyFrame类实例化,并调用wxFrame的Show方法显示即可。这些代码可以写在MyApp类的OnInit方法中。


bool MyApp::OnInit()

{

//建立MyFrame类的实例

MyFrame *frame = new MyFrame(_T("第一个wxWidgets程序"));

frame->Show(true); //显示主窗体

return true; //必须返回true,否则应用程序将退出

}

在以上代码中Show方法有一个参数,如果为true,则以模式窗口的形式显示,否则以非模式窗口的形式显示。


6. 向窗体中加入事件


到目前为止,这个程序的界面已经完成了,但还未响应任何事件,下面就详细阐述如何向这个应用程序中加入事件代码。

对于事件来说,一般都会由两部分组成。


(1)调用事件部分


当程序发生某个动作时,如点击按钮;选中某个控件,可能需要执行一段代码。而这段代码一般是由系统负责调用的,也就是说系统通过事件函数指针调用相应的代码。


(2)事件函数本身


事件函数与普通函数一样,只不过它是在发生了事件之后,由系统调用的。


在wxWidgets中是通过事件哈希表(Event Hash Table)来进行事件处理的,即将相应的事件函数指针保存在一个哈希表中,然后当事件发生时,从这个哈希表中找到相应的事件函数指针,然后通过函数指针调用函数。在使用事件哈希表之前,必须定义它。由于定义哈希表非常复杂,而且每个需要处理事件的类都需要同样的代码,因此,wxWidgets为此定义了一个宏DECLARE_EVENT_TABLE()来定义哈希表。可将这个宏写在MyFrame类的任何位置。它相当于将以下语句放到了MyFrame类中。


private:

static const wxEventTableEntry sm_eventTableEntries[];

protected:

static const wxEventTable sm_eventTable;

virtual const wxEventTable* GetEventTable() const;

static wxEventHashTable sm_eventHashTable;

virtual wxEventHashTable& GetEventHashTable() const;

其中静态数组变量sm_eventTableEntries保存了MyFrame类中的所有的事件信息。


上面的代码声明了处理事件哈希表的一些方法,即然声明了,就得实现。由于实现代码也都一样,因此,wxWidgets也为实现这些方法定义了一组宏。实现这些方法的宏如下所示。


BEGIN_EVENT_TABLE(MyFrame, wxFrame)

EVT_MENU(wxID_EXIT, MyFrame::OnQuit)

EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)

EVT_BUTTON(wxID_ABOUT, MyFrame::OnAbout)

END_EVENT_TABLE()

其中BEGIN_EVENT_TABLE(…)实现了上面定义的方法,以及初始化了静态变量sm_eventTable。后面两个EVT_MENU和一个EVT_BUTTON宏初始化了静态变量sm_eventTableEntries,即将这两个事件函数的指针(button和about菜单使用一个事件函数OnAbout)和控件ID保存在sm_eventTableEntries中,最后的END_EVENT_TABLE()宏做为一个空的事件函数指针赋给了sm_eventTableEntries,这有些象C语言中处理字符串,将最后一个字符赋为’"0’,这样就可以知道哪是结尾了。

向窗体中加入事件的最后一步是声明和实现事件函数。在本例中声明了两个事件函数。

void OnQuit(wxCommandEvent& event);

void OnAbout(wxCommandEvent& event);

可以将这两个函数声明放到MyFrame中的任何位置。下面是它们的实现代码。


void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))

{

Close(true);

}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))

{

wxString msg;

msg.Printf( _T("这是一个关于对话框的例子."n")

_T("欢迎使用 %s"), wxVERSION_STRING);

wxMessageBox(msg, _T("¹关于"), wxOK | wxICON_INFORMATION, this);

}

其中OnQuit函数调用Close(true)关闭MyFrame,由于MyFrame是主窗体,因此,在MyFrame关闭后,应用程序也随之关闭了。OnAbout使用wxMessageBox函数弹出一个信息对话框。


7. 运行程序


到目前为止,这个程序的代码已经基本完成了,但是在前面曾说过,MyApp中的OnInit方法在应用程序启动时执行,那么是谁调用了OnInit方法呢?答案当然是wxWidgets。wxWidgets为了调用这个方法,提供了一个宏IMPLEMENT_APP(…),这个宏有一个参数,需要将MyApp做为参数传入。即IMPLEMENT_APP(MyApp)。这个宏相当于一个WinMain函数(和控制台程序的main函数类似),即在WinMain函数中调用了MyApp中的OnInit函数。在加入这个宏后,就可使用一个C++编译器将以上的源程序编译生成exe文件了。

『伍』 各位高手,小弟正在为选择使用Qt还是WxWidgets而烦恼,请大家给条明路吧!

很好的一篇文章
原文:我所知道的三种开源跨平台GUI toolkits—— GTK、Qt和wxWidgets

1、GTK+

GTK+基础

GTK+最初是GIMP的专用开发库,后来发展为Linux下开发图形界面的应用程序的主流开发工具之一。GTK+2.0是自由软件,并且是GNU工程的一部分。GTK+2.0的许可协议是LGPL。

GTK+使用C语言开发,但是其设计者使用面向对象技术。 在GNOME平台上提供了C++(gtkmm)、Perl、Ruby、Java和Python(PyGTK)绑定,其他的绑定有Ada、 D、 Haskell、PHP和所有的.NET编程语言。

与其他很多部件工具箱不同,GTK+并不基于Xt。这一决策优劣互见:优点是GTK+可以应用于其他系统,其灵活性也很强;而缺点就是它无法利用以传统方法为X11定制的X资源数据库。

Glade是一个界面设计工具,但是它也包含了一种描述GUI界面的XML语言,它和libglade一起工作就可以直接使用GTK和GNOME控件。

2、Qt

Qt简介

Qt是Trolltech公司的一个产品。
Qt是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且 允许真正地组件编程。

自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用 程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。

Qt支持下述平台: MS/Windows - 95、98、NT 4.0、ME、和2000
Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11平台
Macintosh - Mac OS X
Embedded - 有帧缓冲(framebuffer)支持的Linux平台。

3、wxWidgets

开源软件(LGPL),针对C++、Python以及Perl的跨平台工具集。

详细介绍,参见细述 wxWindows
wxWidget作为一个C++ GUI Library从1992发展到现在,已经在全球范围内产生了极大的影响力,利用这个类库进行GUI开发的软件更是不计其数。

wxWidgets原名wxWindows,是由Julian Smart于1992年还在英国爱丁堡大学人工智能应用研究所开始的一个项目。Julian Smart现在是Anthemion软件公司的技术总监。

简单地说,wxWidgets提供了用于可在多平台上开发GUI应用程序的一整套简单易学易用的API。wxWidgets支持的多平台包括
Windows 3.1/95/98/NT/2000/XP、带有Motif
1.2版本以上的Unix、带有GTK+的Unix/Linux/*BSD、Mac等等。开发者只需要用自己使用的系统平台的编译器编译源程序,并链接上
相应的库文件,生成的程序代码即具有该平台的外观和界面。在这些GUI之上,wxWidgets还提供了在线帮助、网络编程、流处理、多种常用图形格式支
持、数据库支持、HTML察看和打印,等等各种强大的功能。

wxWidgets支持的Windows上的多种流行编译器包括:
Visual C++ 1.5, 4.0, 5.0, 6.0
Borland C++ 4.5, 5.0
Borland C++ Builder 1.0, 3.0
Watcom C++ 10.6 (Win32)
Cygwin
MinGW32
Metrowerks CodeWarrior 4

wxWidgets和GTK+的一大吸引力是它的wxWidgets 2 licence类型是属于LGPL ( Lesser
General Public License
)的,也就是说,使用它开发的软件并不要求一定得公开源码。这样,无论是免费软件的开发者、GPL类型软件开发者,还是纯粹商业软件开发者都可以免费使用
这个软件包。

相比之下,TrollTech的Qt似乎正是因为此因素而影响了它的受接受程度,因为用Qt开发商用软件者所需交纳的费用对于个人
开发者来说还是比较昂贵的,而且分单平台、二平台、三平台(即Qt/X11、Qt/Windows和Qt/Mac都包含在内了)三个不同产品包,又分
Professional和Enterprise不同Edition亦即不同价位,而且开发人员数不同价格也不同。

从这点说来,wxWidgets是绝对具有优势的。另外Qt起源于Linux上的开发,后来推展到Windows、Mac等其它平台;而wxWidgets恰好相反,始于Windows,其后移植到Unix等其它平台。

关于LGPL(Lesser General Public License ) 许可,这是 GNU
许可家族中一个不太严格的许可。LGPL 允许任何人使用该库提供的功能,而不
要求用户公开应用程序代码。(这对于许多工业应用来说很重要,因为由于以前的协议或许可,这种场合下一般不希望公开代码或者公开代码是显然不现实的。)使
用 LGPL 许可,您既可以是开放源码社区的好伙伴也可以是好公民。

中文非正式翻译参见 http://gnu.freehostingguru.com/lgpl/

其他资源:知名 GUI lib 简评 (GTK+, Qt, wxWidgets)

Technorati Tags: GTK, Qt, wxWidgets, 图形界面, 跨平台

从网上搜到的,仅供参考,也许对你会有一点小小的帮助!

『陆』 MFC,WTL,WPF,wxWidgets,Qt,GTK 各有什么特点

MFC乃曾经的老大,现在来看设计有点落后;原本可以做得更好用,但MS为了推COM而变得臃肿,而现在MS为了推.net更不愿意继续发展它。
WTL基于ATL,ATL是COM组件的模版库,COM是C++应用中的毒瘤(明知有人会喷我,我依然坚持真理); WTL曾受MS打压,因为MS怕它的轻巧特性会妨碍推广.Net,现在不需要打压了,因为已经扶不上墙了。
WPF:不是给C++用的。
wxWidgets:小巧、小众、多bug;和MFC差不多,这是优点,也是死穴。
Qt:库有点庞大,啥都有,信号和槽机制需要特殊的编译器搞;没能尽量复用C++已有的库,看重复的东西会人特别烦。(我个人最看好Qt)。
GTK:两个字“难用”。

『柒』 如何参与到wxwidgets的开发中去

wxWidgets是一个跨平台的软件开发包。它诞生于1992年,最初的名子是wxWindows,但由于Microsoft的抗议,在2004年改名为wxWidgets。它最初是被设计成跨平台的GUI软件开发包,但后来随着越来越多的人参与进来,为wxWidgets加入了许多非GUI的功能,如多线程(MultiThread)、网络(Network)等。并且从最初的只支持C++语言,逐渐发展成为支持数种语言(如Python、Perl、C#、Basic等)。因此,现在的wxWidgets已经不再是单纯的跨平台的GUI软件开发包,而是一个可以支持多种操作系统平台的能够在多种语言中使用的通用跨平台软件开发包。

由于wxWidgets最开始是为C++而设计的,因此,本文主要讨论了wxWidgets在C++中的使用。

为什么选择wxWidgets?

目前支持C++的软件开发包非常多,比较有名的除了wxWidgets外,还有一些其它的软件开发包,如MFC、QT、ACE等。即然有这么多开发包,那么我们为什么要使用wxWidgets呢?在给出答案之前,让我们首先来看一看上述的三种软件开发包的特性。

1. MFC

MFC是Microsoft提供的软件开发包。MFC虽然十分强大,但它只能运行在Windows下运行。而且它是收费的。

2. QT

QT是由Trolltech 公司开发的一套跨平台软件开发包。它和wxWidgets类似,但是QT只在linux下免费,而在Windows或Unix下使用QT要向Trolltech公司支付版权费。

3. ACE

ACE虽然是免费开源的,但是它没有提供GUI功能。

从以上三个软件开发包可以看出,它们虽然有各自的优势,但是它们或多或少地都会使开发受到限制。而使用wxWidgets将不会有以上所述的问题。wxWidgets和MFC、QT、 ACE的特性对比如表1所示。

注:其中免费中的“是/否”代表QT在linux平台上的Free Edition是免费的,而在windows和unix下使用QT是收费的。而开源中的“是/否”代表QT有一个基于GPL的开源版本,但要进行商业开发,需要使用它的商业版本。

使用wxWidgets编写程序

学习一种编程语言的最好方法就是用它去编写程序,学习wxWidgets也不例外。由于wxWidgets的主要功能是实现跨平台的GUI,因此,本文主要从GUI入手,讨论wxWidgets在C++中如何编写跨平台的应用程序

1. 应用程序类的建立

使用wxWidgets建立系统需要一个类来描述整个应用程序。这个类必须从wxApp类继承。

class MyApp : public wxApp //应用程序类

{

public:

virtual bool OnInit(); // 在应用程序启动时调用,如果返回false,退出应用程序

};

这个类只覆盖了wxApp的一个虚方法OnInit。可以用这个方法在程序启动时做一些验证,如果验证失败,可以通过返回false退出应用程序。当然,由于这个函数是应用程序的入口点,所以建立主窗体的工作要在这个函数中完成。

2. 建立窗体类

wxWidgets中关于窗体的类很多,如果要建立一般窗体的话,可以从wxFrame继承。

class MyFrame : public wxFrame //窗体类

{

public:

MyFrame(const wxString& title); // 窗体的构造函数

};

3. 向窗体中加入控件

在本文中向这个窗体加入了一个菜单条(Menu Bar)、一个状态条、一个Panel和一个按钮。一般我们会在主窗体的构造函数中加入这些控件。

MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title)

{

wxMenu *fileMenu = new wxMenu; // 建立“文件”菜单

wxMenu *helpMenu = new wxMenu; // 建立“帮助”菜单

// 向菜单中添加子项

helpMenu->Append(wxID_ABOUT, _T("关于"tF1"), _T("显示关于对话框"));

fileMenu->Append(wxID_EXIT, _T("退出"tAlt-X"), _T("退出应用程序"));

wxMenuBar *menuBar = new wxMenuBar(); // 建立一个菜单条

menuBar->Append(fileMenu, _T("文件")); //将“文件”菜单加入到菜单条

menuBar->Append(helpMenu, _T("帮助")); //将“帮助”菜单加入到菜单条

SetMenuBar(menuBar); //将菜单条放到窗体上

wxPanel *panel = new wxPanel(this); //建立一个Panel

wxButton *button = new wxButton(panel, wxID_ABOUT, "关于", wxPoint(20, 20), wxSize(50, 30)); //建立一个Button

CreateStatusBar(2); //建立一个两栏的状态栏

SetStatusText(_T("欢迎使用wxWidgets!")); //设置状态栏的文本

在数组sample_xpm中描述了sample.ico的属性和图标本身。如X代表红色; o代表黄色等。然后在源程序中通过include “sample.xpm”引用这个资源文件。要想从这个资源文件中装载图标。可使用SetIcon(wxICON(sample)); wxICON读取资源文件,而SetIcon将这个图标设置为frame的标题栏图标。要想将ico文件转换为这种资源文件,可使用一个免费软件XnView进行转换。

5. 显示主窗体

显示主窗体非常简单,只需要将上面建立的MyFrame类实例化,并调用wxFrame的Show方法显示即可。这些代码可以写在MyApp类的OnInit方法中。

bool MyApp::OnInit()

{

//建立MyFrame类的实例

MyFrame *frame = new MyFrame(_T("第一个wxWidgets程序"));

frame->Show(true); //显示主窗体

return true; //必须返回true,否则应用程序将退出

}

在以上代码中Show方法有一个参数,如果为true,则以模式窗口的形式显示,否则以非模式窗口的形式显示。

6. 向窗体中加入事件

到目前为止,这个程序的界面已经完成了,但还未响应任何事件,下面就详细阐述如何向这个应用程序中加入事件代码。

对于事件来说,一般都会由两部分组成。

(1)调用事件部分

当程序发生某个动作时,如点击按钮;选中某个控件,可能需要执行一段代码。而这段代码一般是由系统负责调用的,也就是说系统通过事件函数指针调用相应的代码。

(2)事件函数本身

事件函数与普通函数一样,只不过它是在发生了事件之后,由系统调用的。

在wxWidgets中是通过事件哈希表(Event Hash Table)来进行事件处理的,即将相应的事件函数指针保存在一个哈希表中,然后当事件发生时,从这个哈希表中找到相应的事件函数指针,然后通过函数指针调用函数。在使用事件哈希表之前,必须定义它。由于定义哈希表非常复杂,而且每个需要处理事件的类都需要同样的代码,因此,wxWidgets为此定义了一个宏DECLARE_EVENT_TABLE()来定义哈希表。可将这个宏写在MyFrame类的任何位置。它相当于将以下语句放到了MyFrame类中。

private:

static const wxEventTableEntry sm_eventTableEntries[];

protected:

static const wxEventTable sm_eventTable;

virtual const wxEventTable* GetEventTable() const;

static wxEventHashTable sm_eventHashTable;

virtual wxEventHashTable& GetEventHashTable() const;

其中静态数组变量sm_eventTableEntries保存了MyFrame类中的所有的事件信息。

上面的代码声明了处理事件哈希表的一些方法,即然声明了,就得实现。由于实现代码也都一样,因此,wxWidgets也为实现这些方法定义了一组宏。实现这些方法的宏如下所示。

BEGIN_EVENT_TABLE(MyFrame, wxFrame)

EVT_MENU(wxID_EXIT, MyFrame::OnQuit)

EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)

EVT_BUTTON(wxID_ABOUT, MyFrame::OnAbout)

END_EVENT_TABLE()

其中BEGIN_EVENT_TABLE(…)实现了上面定义的方法,以及初始化了静态变量sm_eventTable。后面两个EVT_MENU和一个EVT_BUTTON宏初始化了静态变量sm_eventTableEntries,即将这两个事件函数的指针(button和about菜单使用一个事件函数OnAbout)和控件ID保存在sm_eventTableEntries中,最后的END_EVENT_TABLE()宏做为一个空的事件函数指针赋给了sm_eventTableEntries,这有些象C语言中处理字符串,将最后一个字符赋为’"0’,这样就可以知道哪是结尾了。

向窗体中加入事件的最后一步是声明和实现事件函数。在本例中声明了两个事件函数。

void OnQuit(wxCommandEvent& event);

void OnAbout(wxCommandEvent& event);

可以将这两个函数声明放到MyFrame中的任何位置。下面是它们的实现代码。

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))

{

Close(true);

}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))

{

wxString msg;

msg.Printf( _T("这是一个关于对话框的例子."n")

_T("欢迎使用 %s"), wxVERSION_STRING);

wxMessageBox(msg, _T("¹关于"), wxOK | wxICON_INFORMATION, this);

}

其中OnQuit函数调用Close(true)关闭MyFrame,由于MyFrame是主窗体,因此,在MyFrame关闭后,应用程序也随之关闭了。OnAbout使用wxMessageBox函数弹出一个信息对话框。

7. 运行程序

到目前为止,这个程序的代码已经基本完成了,但是在前面曾说过,MyApp中的OnInit方法在应用程序启动时执行,那么是谁调用了OnInit方法呢?答案当然是wxWidgets。wxWidgets为了调用这个方法,提供了一个宏IMPLEMENT_APP(…),这个宏有一个参数,需要将MyApp做为参数传入。即IMPLEMENT_APP(MyApp)。这个宏相当于一个WinMain函数(和控制台程序的main函数类似),即在WinMain函数中调用了MyApp中的OnInit函数。在加入这个宏后,就可使用一个C++编译器将以上的源程序编译生成exe文件了。

『捌』 wxwidgets和c#哪个好

1、GTK+

GTK+基础

GTK+最初是GIMP的专用开发库,后来发展为Linux下开发图形界面的应用程序的主流开发工具之一。GTK+2.0是自由软件,并且是GNU工程的一部分。GTK+2.0的许可协议是LGPL。

GTK+使用C语言开发,但是其设计者使用面向对象技术。 在GNOME平台上提供了C++(gtkmm)、Perl、Ruby、Java和Python(PyGTK)绑定,其他的绑定有Ada、 D、 Haskell、PHP和所有的.NET编程语言。

与其他很多部件工具箱不同,GTK+并不基于Xt。这一决策优劣互见:优点是GTK+可以应用于其他系统,其灵活性也很强;而缺点就是它无法利用以传统方法为X11定制的X资源数据库。

Glade是一个界面设计工具,但是它也包含了一种描述GUI界面的XML语言,它和libglade一起工作就可以直接使用GTK和GNOME控件。

2、Qt

Qt简介

Qt是Trolltech公司的一个产品。
Qt是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且 允许真正地组件编程。

自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用 程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。

Qt支持下述平台: MS/Windows - 95、98、NT 4.0、ME、和2000
Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11平台
Macintosh - Mac OS X
Embedded - 有帧缓冲(framebuffer)支持的Linux平台。

3、wxWidgets

开源软件(LGPL),针对C++、Python以及Perl的跨平台工具集。

详细介绍,参见细述 wxWindows
wxWidget作为一个C++ GUI Library从1992发展到现在,已经在全球范围内产生了极大的影响力,利用这个类库进行GUI开发的软件更是不计其数。

wxWidgets原名wxWindows,是由Julian Smart于1992年还在英国爱丁堡大学人工智能应用研究所开始的一个项目。Julian Smart现在是Anthemion软件公司的技术总监。

『玖』 有哪些软件是wxwidgets开发的

1 先上一段项目截图,IDE-codeblocks 后台数据库postgresql。

2 再来张软件运行截图

3 引用库截图

4 来张数据库截图

5 与SAP系统同步类截图

6 合同标签引入二维码截图

热点内容
什么时候解禁市值千亿 发布:2025-05-09 01:44:15 浏览:953
悟空理财是什么样的理财方式 发布:2025-05-09 01:27:13 浏览:23
怎么买期货苹果 发布:2025-05-09 01:24:21 浏览:815
滴滴刚上市股市是多少 发布:2025-05-09 01:16:58 浏览:433
钱存在银行怎么理财 发布:2025-05-09 00:57:50 浏览:429
qq图标理财通怎么点亮 发布:2025-05-09 00:56:53 浏览:619
基金怎么分辨属于哪一类股 发布:2025-05-09 00:55:22 浏览:315
mac下的股票交易软件 发布:2025-05-09 00:50:56 浏览:628
股市上的多少股是什么意思 发布:2025-05-09 00:31:34 浏览:905
事业基金怎么写 发布:2025-05-09 00:30:54 浏览:213