当前位置: 首页 > news >正文

C++程序设计:原理与实践(进阶篇)17.4 使用GUI库

17.4 使用GUI库


在本书中,我们不直接采用操作系统的图形和GUI(图形用户界面)工具,否则会将程序限制在一种特定的操作系统上,而且需要处理很多复杂的细节问题。与处理文本I/O一样,我们将使用一个函数库来消除操作系统间的差异、I/O设备的变化等问题,并简化程序代码。不幸的是,C++并没有提供一个像标准流I/O库一样的标准GUI库,于是我们从很多可用的C++ GUI库选择了一个。为了不局限于这种GUI库,并且避免一开始就接触其复杂功能,我们只使用一组在任何GUI库中都只需几百行程序就能实现的接口类。

我们使用的(目前还只是间接使用)GUI工具包名为FLTK(Fast Light Tool Kit,读作“full tick”),该工具包源自www.f?ltk.org。我们的代码可以移植到任何使用FLTK的平台(Windows、Unix、Mac、Linux等)。我们的接口类也可以使用其他的图形工具包重新实现,因此基于它的代码的移植性实际上还要更好一些。

接口类实现的编程模型比通常的工具包提供的更简单。例如,我们整个图形和GUI接口库的C++代码大约为600行,而最简单的FLTK文档也达370页。你可以从www.f?ltk.org下载,但我们并不推荐你阅读,目前还不需要那些细节。第17~21章给出的概念可用于任何一个流行的GUI工具包,当然我们也会解释接口类是如何映射到FLTK的,以便在必要的时候能够直接使用其他的工具包。

我们实现的“图形世界”的部分结构如下:

 

接口类为二维形状提供了简单、用户可扩展的基本框架,并支持简单的颜色。为了实现这些功能,我们给出了基于“回调函数”的GUI概念,这些函数由屏幕上的用户自定义按钮等组件触发(参见第21章)。

相关文章:

  • xDAIS C++
  • 《PHP和MySQL Web开发从新手到高手(第5版)》一2.6 将数据插入到表中
  • 性能调优工具类MyStopwatch
  • MYSQL5 注射技巧笔记
  • 对于MeeGo你所需了解的......
  • RHEL5.5 更新Firefox
  • Visual C++ MFC 中常用宏的含义
  • 《大数据管理概论》一第1章概  述1.1 大数据的基本概念
  • table表格的常用功能
  • 《JavaScript面向对象编程指南》——2.4 基本数据类型综述
  • {转}Java 理论与实践: 正确使用 Volatile 变量
  • 《iOS 8案例开发大全》——实例009 启动模拟器
  • 腾讯:致广大QQ用户的一封信
  • 《JavaScript面向对象编程指南》——2.7 注释
  • 关于360与腾讯QQ之争 IT人士的看法
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Logstash 参考指南(目录)
  • mockjs让前端开发独立于后端
  • mysql_config not found
  • Objective-C 中关联引用的概念
  • spark本地环境的搭建到运行第一个spark程序
  • ucore操作系统实验笔记 - 重新理解中断
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 聊聊flink的TableFactory
  • 微信小程序--------语音识别(前端自己也能玩)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • RDS-Mysql 物理备份恢复到本地数据库上
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (Note)C++中的继承方式
  • (层次遍历)104. 二叉树的最大深度
  • (二)springcloud实战之config配置中心
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (四)汇编语言——简单程序
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转) Face-Resources
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .FileZilla的使用和主动模式被动模式介绍
  • .gitignore文件设置了忽略但不生效
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [2669]2-2 Time类的定义
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)