wxWidgets GUI 编程介绍 【已翻译100%】

导论

wxWidgets 是C++的跨平台开发框架。它由 Julian Smart 于1992年在爱丁堡大学人工智能应用研究院发起的,自那之后,该框架分发到了众多平台之上。

本文旨在引导初学者安装所需资源并以Code::Blocks作为IDE使用wxWidgets开发一个单应用程序。

什么是wxWidgets

wxWidgets 是一系列C++库,它遵循多平台GUI开发框架的设计规则。它有类似于MFC易于使用的API。把它和特定的库链接并编译,可是你的应用程序与目标平台的界面相似。wxWidgets 是一个非常完整的框架,它几乎为你任何需求提供解决方案,并简化使用习惯。

**为什么是wxWidgets
**
对于跨平台GUI开发有很多可选的选项。可能最流行的是Java,但是对于许多应用程序而言这不是一个有效率的选择。在C++中有QT,一个非常不错的框架,但是它也有许多不足之处,第一点,它是仿平台外观的,而wxWidgets使用平台库创建图形接口;第二点,在你写的代码与最终被编译的C++代码之间,QT采用了一种与众不同的方式去使用一个专属的层。这里不提及微软的可视化框架,它只能工作在windows上,与它类似还有mono.net,它是搭建在层上的层。

与之相反的例子wxWidgets是C++的,它是高效的,并且不用在你的代码上添加额外的层。它是一个类库的集合,因此你可以使用C++编译器去编译它,不是说每一种C++编译器都可以,但是大多数通用的都可以。

其他的优势和特点:

  • 它一直在被开发,还有很多支持,更是协作的开放源代码社区。
  • 它完全免费,无论是私人用途还是商业用途。
  • 有大量的在线文档。
  • 容易学习,它就是C++。
  • 有很多现成的类和库,参看这里。

开始
让我们开始工作吧. 首先我们需要框架本身和IDE让我们可以开始开发。然后我们可以做些魔术,把“hello,world“打到我们的屏幕上。

安装

我会展示windows环境的安装步骤,其他操作系统也类似。我使用Code::Blocks作为IDE因为它和wxWidgets结合的很好,并且它对windows和linux都有免费的稳定版本。

1. 下载和安装Code::Blocks

你可以从它自己的官网网址【http://www.codeblocks.org/downloads/26】去下载二进制版本,我建议你下载最新的mingw的稳定版本呢,现在最稳定版本是codeblocks-13.12mingw-setup,它会自带mingw编译器。下载并且安装,就像其他经典的windows安装程序一样。或许你需要把 mingw/bin写到环境变量PATH中,如果有人不知道怎么做,我可以增加更详细的步骤。

2. 下载,安装和编译wxWidgets

你可以从wxWidgets的存储库中下载wxWidgets资源。下载wxMSW安装器或者ZIP,因为安装程序就是一个压缩文件夹。下载稳定的realease 2.8.12版本,因为它是最兼容Code::Block的分支。

如果你已经下载安装器或者ZIP文件,就把它安装或者解压到C:目录下。然后在标准的windows控制台上打开命令行shell(cmd),更改wxWidgets的生成目录。

关键是去编译wxWidgets的时候,使用一样的编译器,你会在稍后开发的时候使用到。如果你已经安装了Code::Block IDE和mingw,并且添加路径(mingw/bin)到环境变量中,这样你就不会有任何问题。

cd <wxwidgets>\build\msw

是你提取资源的路径(典型的是 C:wxWidgets-2.8.12)。

你必须执行生成命令,gcc编译器可以像这样输入:

mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 CXXFLAGS=-fno-keep-inline-dllexport

花点时间去看看编译的变量,这样你就可以选择更适合你的需要变量选项:

BUILD:wxWidget的生成类型。在大多数情况下你会使用‘release’选项,因为你不会去调试wxWidgets本身。你可以调试你自己的程序链接到一个release版本的wxWidgets。

SHARED: 这个变量定义了链接类型: 动态链接 (SHARED=1)下你必须把所需要的DLL和你的程序一同发布,而在静态链接(SHARED=0)下你只需要发布你的程序本身。动态链接下生成的程序体积更小,但你需要相应的DLL才能运行它。

MONOLITHIC: 控制编译生成一个DLL(MONOLITHIC=1)还是多个DLL(MONOLITHIC=0)。当monolithic开关打开时,开发更加简单,你只需要在发布你的程序时携带一个DLL;然而monolithic开关关闭时,链接过程会更有效率,因为这样避免了链接整个wxWidget代码库。

UNICODE: 定义wxWidget和你的程序是使用宽字符字符串(UNICODE=1)还是ANSI(UNICODE=0)。强烈建议使用wxWidget的 _("string") 和 _T("string") 宏来确保你的硬编码字符串格式正确。

现在,wxWidgets已经编译完毕,那么就让我们开始写几个以它为框架的程序吧。

新建工程

1.首先启动Code::Blocks,点击“创建新工程”

2.在项目选择窗口中选择wxWidget

3.现在你需要选择wxWidgets版本。请确保选择你当前安装的版本。本教程中,请选择2.8.x

  1. 然后会出现一个项目命名窗口。在这里,你可以为命名项目并且选择存储位置。我这里取名为HelloWorld

  1. 现在,你需要选择GUI Builder,这是一个帮助你在图形化界面下创建图形化界面的工具。我们这里选择xwSmith。在应用类型中,选择Frame Based

  1. 下一步,请选择你电脑本地wxWidgets的位置。最好的选择是保持全局环境变量不变。点击下一步时,将会弹出全局变量菜单,所以你必须在base栏中填入wxWidgets的路径。如果你改变了wxWidgets的位置,你需要在Code::Blocks配置中编辑全局变量。

  1. 选择编译器。默认GCC编译器就可以了。

  1. 现在,你有许多配置选项。在第一个选项中,你需要保证这个选项和你构建wxWidgets时使用同样的选项。

“Use wxWidgets DLL”, 如果你构建时SHARED=1,请选择该项。

“wxWidgets is built as a monolithic library”, 如果你构建时MONOLITHIC=1,请选择该项。

“Enable unicode”, 构建时UNICODE=1,请选择该项。

举例来说,在上述截图中我并没有选择Use wxWidgets DLL是因为我在构建wxWidgets时使用了SHARED=0.

在Configure Advance Options前打勾。

  1. 最后一个窗口,确保Use WXDEBUG and Debug wxWidgets lib 选项不被选中

有可能在你按下Finish的时候。屏幕上出现了一个对话框,告诉你没有调试版,点击Accept 。你可以没有任何问题的使用发布版wxWidget来调试。

  1. 现在,我们面对着开发的窗口,事情应该像下图一样。

给我们的窗口加点东西

如果你按下了Build and Run按钮(有齿轮和三角形[播放图标]的那个),就会显示一个有一个菜单栏和两个选项(Menu和Help)的小窗口,上面还有一个空的Status Bar。但是检查一下一切是否工作正常总是好的。

现在我将叙述如何给我们的窗口加上文本标签和按钮。我并不会对你能使用的许多选项和窗口部件深入论述,因为这篇教程的目的仅仅是一个对于该框架的简介。但是,我还是会说一些关于开发环境的内容。

在屏幕中央我们能看到“设计”窗口。在该窗口中我们可以编辑图形界面或是代码,具体是什么取决于我们正在编辑的文件。在其之上有两个按钮,一个打开菜单按钮编辑器,另一个打开状态栏编辑器。但是最重要的是在设计窗口下面的部分,在那里我们可以看到很多代表部件的按钮,它们以目录形式被整理起来,可以用于开发。

在左边,我们看到了两个不同的部分,资源/文件浏览器在上方,属性编辑器在下方。

资源/文件浏览器让我们容易找到我们想要去编辑的文件或者资源。在顶部有一些tab里,我们可以改变他们的视图。最重要的是工程tab和资源tab。

在工程树中,我们可以发现所有隐含在程序中的文件。在资源树中,我们可以发现图片资源。

在属性编辑器中的文件/资源导航器下方,我们将可以直接修改一些资源属性。

我将会在稍后回来,(介绍)在窗口上工作。

时间: 2024-08-02 05:44:45

wxWidgets GUI 编程介绍 【已翻译100%】的相关文章

用 90 行 Haskell 代码实现 2048 游戏 【已翻译100%】

上个星期赖斯大学的MOOC 计算的规则 公开课在 Coursera 上开讲啦. 从第一周的材料来看,看起来它有了他们之前的课程 Python中的交互式编程介绍 所有优良的东西: 演示文稿做的很不错,也有大量的支持可用, 而布置的作业也很有趣. 第一个作业就是编写 2048 游戏的逻辑. 鉴于其设计中的根本性缺陷,我并不认为2048特别的有趣. 首先,你并不能在某个地方取得游戏的胜利. 其次,最有希望的游戏策略使得其玩起来相当的繁琐,而且最大的乐趣并不是自己的游戏技能而是随机数生成器制造的幸运连胜

函数式编程和 J 编程语言 【已翻译100%】(1/3)

摘要: 这里是一个使用J编程语言作为例子对函数式编程所做的一个简要介绍. 用几个示例来向您展示函数式语言令人影响深刻的能力,以及它们在数学领域的应用. 讨论了使用J语言作为数学符号替代品. 主要领域:函数式编程,J编程语言. 关键词:函数式编程,J编程语言. 1 介绍 计算式是一种用来解释语言的机制. 计算机所解释 (执行特定动作的) 的语句,中所周在叫做计算机的机器语言. 因而它跟随关于计算机组织的研究,被关联到有关计算机语言的组织的研究. 计算机语言可以用很多种方式分类.而机器语言直接为计算

函数式编程和 J 编程语言 【已翻译100%】(3/3)

5.2.1 实验 考虑一个实验,评估工作站上执行fibonacci需要多长时间.先估计fib_work 100,尽管上面已经给出递归过程的定义,但有必要给出一个迭代过程的定义以便于评估.考虑下面的函数定义: fib_work_iter =: monad def 'fib_iter 1 1 , y.' fib_iter =: monad define ('a' ; 'b' ; 'count') =. y. if. count = 0 do. b else. fib_iter (1 + a + b)

函数式编程和 J 编程语言 【已翻译100%】(2/3)

3 为什么要学习函数式编程 函数式编程之所以重要有以下原因: 3.1 可任意赋值 函数式语言允许程序不事先分配内存.结构化的命令式语言(没有goto语句)使得程序容易派生,便于理解和追踪.类似的,assignment-free函数语言也有相同的优点. 3.2 抽象层次高 函数式语言提倡使用更高层次的抽象.例如,函数可以作为函数调用的返回值.函数可以像数据一样被操纵.现存的函数可以被修改,也可以联合组成新的函数.函数式编程包含大量的工作单元而很少使用个体声明.算法可以被直接实现而不引用任何数据.

简短介绍 C# 6 的新特性 【已翻译100%】

几周前我在不同的地方读到了有关C#6的一些新特性.我就决定把它们都收集到一起,如果你还没有读过,就可以一次性把它们都过一遍.它们中的一些可能不会如预期那样神奇,但那也只是目前的更新. 你可以通过下载VS2014或者安装这里针对visual studio2013的Roslyn包来获取它们. 那么让我们看看吧: 1. $ sign 使用它的目的是简化基于索引的字符串,仅此而已.它不是像现在C#的一些动态特性,因为其内部使用了正规的索引功能. 为了编译理解请看下面的示例: var col = new

从 C++ 到 Objective-C 的快速指南 【已翻译100%】

**简介 ** 当我开始为iOS写代码的时候,我意识到,作为一个C++开发者,我必须花费更多的时间来弄清楚Objective-C中怪异的东西.这就是一个帮助C++专家的快速指南,能够使他们快速的掌握Apple的iOS语言. 请注意这绝不是一个完整的指南,但是它让你避免了阅读100页的手册.除此之外,我知道你喜欢我的写作风格. 背景 需要C++的技能,我会比较C++和Objective-C的东西.此外,COM编程也是有用的,因为Objective-C有类似于IUnkown的东西,因此基础的COM编

Swift 在对 Objective-C 改进的 6 个方面 【已翻译100%】

在 Atomic Object 的安娜堡办公室,我们做了一个观看2014年的WWDC主题演讲,毫不夸张地说,当Swift宣布的时候,我们感到十分激动.Swift,苹果正在推进的一个更现代的编程语言.我很高兴能获得先机并开始用它开发. 在这篇博文中,我将重点介绍Swift的几个语言特性,这将使开发者的工作更加轻松. Objective-C语言的问题 当一个开发者申请一个关于Atomic Object的新职位时,我们会给他填写一个(GTKY) Getting To Know You的表.这个表要求填

编写更好代码的 6 个提示 【已翻译100%】

每周我都可以用四种不同的语言编写至少几百行代码.我也可以同其他与我一同工作的开发者协作进行代码的编辑和审查. 简单来说,有许多代码在到处放着,当它们没有被组织管理起来,但 更重要的是当它们没有写好时,事情就会变得有点复杂起来.让我们来看一看几种能提升我们的代码整体质量的不同方法. 1. 开始构建模块 保持代码一致,可重用且有组织的一个最好方式就是将功能成组的放在一起.例如,别把你所有的js代码都扔到一个main.js文件中,而是要尝试基于功能将它们分组放在分开的文件里面, 然后在你达成你的构建步

如何雇一个牛逼的 Node.js 开发者 【已翻译100%】

初创公司是我的激情所在,而我干的也是管理一群雄心壮志的开发人员.我工作在Strongloop,并且已经在很多初创公司待过.初创公司在雇佣问题上有它独特的挑战----预算紧,期限近.加上要使用开源框架进行开发,而且还是相对年轻的框架,如Node.js,这一切使得雇佣一个合适的团队成为了一种巨大的挑战. 正如所有新兴并被快速采用的技术框架一样,一开始的挑战就是给你的技术团队增加高效的人才资源.在快速得出关于把 Javascript 开发变成 Node.js 工厂的结论之前,让我们先来看看关于 Nod