FLTK学习笔记1-绘制基本控件(按钮、文本输入、容器)

  • FLTK中的坐标
  • FLTK常用控件
    • 按钮控件
    • 文本控件
    • 容器控件
  • 绘制基本控件

FLTK中的坐标

在FLTK中坐标均为正整数,其单位是像素(pixel),原点(x=0, y=0)在屏幕的左上角,如下图所示:

FLTK常用控件

在FLTK中,常用控件有按钮控件、文本控件以及容器控件等。同时,所有控件的创建方法都一样:

Fl_SomeWidget* pW = new SomeWidget(x, y, w, h, label);

这里Fl_SomeWidget是控件的名称,x, y, w, h分别对应控件的x坐标,y坐标,宽度和高度,label对应控件的显示名称。

按钮控件

按钮(Button)是最常用的控件之一,通过按钮用户可以调用对应的回调函数,从而控制程序的行为。

FLTK提供了以下几种常用按钮:

  1. Fl_Button
    这种是最普通也是最常用的按钮。
  2. Fl_Check_Button
    复选框控件,一组中可以有多个被选中。
  3. Fl_Return_Button
    这种按钮可以用回车键激活(即使焦点不在这个按钮上)。
  4. Fl_Radio_Round_Button
    (单)选框,与复选框不同的地方在于可以让一组中仅有一个单选框被激活。

文本控件

文本控件也是常用控件之一,它可以用来进行文字编辑以及输入输出。对于Fl_Text_Display和Fl_Text_Editor对象而言,需要绑定一个Fl_Text_Buffer对象作为要显示(编辑)的文字内容。

FLTK提供了以下几种用于处理文本的控件:

  • Fl_Input
    单行文本输入控件。
  • Fl_Output
    单行文本输出控件(只能复制,不能修改)。
  • Fl_Multiline_Input
    多行文本输入控件。
  • Fl_Multiline_Output
    多行文本输出控件。
  • Fl_Text_Display
    多行文本显示控件。
  • Fl_Text_Editor
    多行文本编辑控件。

容器控件

FLTK提供了以下几种容器控件:

  • Fl_Double_Window
    一个普通的双缓冲窗口。
  • Fl_Group
    一个基本的容器类,可以将其它控件进行编组。
  • Fl_Window
    一个普通的窗口。

因为在FLTK中,每一个被新加入的控件都默认被分到最近的一个分组(Group)中,因此在摆放完一个分组的所有控件后要调用end()方法使后面添加的控件隶属于其父分组。

绘制基本控件

在FLTK中绘制基本控件并显示需要以下几个步骤:

  1. 创建一个窗口
  2. (可选)创建分组
  3. 创建控件
  4. 窗口调用end()方法
  5. 显示窗口
  6. 运行FLTK主循环

示例程序:

#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Check_Button.H>
#include <FL/Fl_Return_Button.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Text_Editor.H>
#include <FL/Fl_Radio_Round_Button.H>int main(){Fl_Double_Window window(450, 350, "Simple Table");                  /* 1. 创建一个窗口 */Fl_Group* pGroup = new Fl_Group(50, 50, 400, 150);                  /* 2. 创建一个分组 */Fl_Button* pButton = new Fl_Button(70, 50, 150, 30, "Fl_Button"); /* 3. 创建控件 */Fl_Check_Button* pChkButton = new Fl_Check_Button(230, 50, 150, 30, "Fl_Check_Button");Fl_Return_Button* pRetButton = new Fl_Return_Button(70, 100, 150, 30, "Fl_Return_Button");Fl_Radio_Round_Button* pRndButton = new Fl_Radio_Round_Button(230, 100, 150, 30, "Fl_Round_Button");pGroup->end();                                                        /* 4. 结束上个容器的创建 */Fl_Text_Editor* pText = new Fl_Text_Editor(50, 150, 350, 150);Fl_Text_Buffer* pBuff = new Fl_Text_Buffer();pText->buffer(pBuff);                                             /* pBuff->text()中的内容就是Fl_Text_Buffer中显示的内容 */pBuff->text("示例文字");pText->end();window.end();                                                      /* 4. 结束上个容器的创建 */window.show();                                                        /* 5. 显示窗口 */return Fl::run();                                                  /* 6. 运行FLTK主循环 */
}

这里注意在编译的时候记得加上-lfltk命令(在MSYS2上还要加上-mwindows -DWIN32 -lole32 -luuid -lcomctl32)。

运行结果:

相关链接:
完整程序
专栏:FLTK
FLTK学习笔记2-回调函数

FLTK学习笔记1-绘制基本控件(按钮、文本输入、容器)相关推荐

  1. 安卓学习笔记18:常用控件 - 按钮、图像视图和图像按钮

    文章目录 零.学习目标 一.按钮控件 1.继承关系图 2.常用属性 二.图像视图 1.继承关系图 2.常用属性 三.图像按钮 1.继承关系图 2.常用属性 四.教学案例 - 通过按钮缩放图片 (一)运 ...

  2. C# 学习笔记(8) 控件的跨线程访问

    C# 学习笔记(8) 控件的跨线程访问 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https: ...

  3. Python tkinter 学习笔记(2)-- 控件、组件(二)

    Python tkinter 学习笔记(1)-- 第一个窗口之HelloWorld 教程 Python tkinter 学习笔记(2)-- 控件.组件(一) > 续上一章节 Python tki ...

  4. Vue学习笔记:Element时间控件设置某一个日期禁止选择

    Vue学习笔记:Element时间控件添加一段时间禁止选择 需求:时间控件,当天之前禁止选择,某一个日期的之前时间禁止选择 文档: 代码实现:在时间控件上添加 :picker-options=&quo ...

  5. Duilib学习笔记《03》— 控件使用

    在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...

  6. 安卓开发学习笔记1:简单控件

    此文章仅为本人在学习安卓开发时的一些笔记 界面显示逻辑处理 使用XML标记.描绘应用界面,使用Java书写程序逻辑 使用XML描述APP界面 使用XML文件描述APP界面 一个界面布局可以被多处代码复 ...

  7. .net学习笔记12--数据验证控件--RegularExpressionValidator

    RegularExpressionValidator控件用于确定输入控件的值是否与某一个正则表达式所定义的模式相匹配. 正则表达式时一种文本模式,包括普通字符(如a~z之间的字母)和特殊字符.使用正则 ...

  8. Python tkinter 学习笔记(2)-- 控件、组件(一)

    Python tkinter 学习笔记(1)-- 第一个窗口之HelloWorld 教程 目录 一.Tkinter 15种基础控件 1. Button 按钮控件 2.Canvas 画图控件 3.Che ...

  9. Android学习笔记(一)——控件布局常用属性

    LinearLayout线性布局 id:为控件指定相应的ID. width:控件的宽度. height:控件的高度. background:背景颜色. Orientation:控件的排列方向(默认是水 ...

  10. Coolite Toolkit学习笔记八:常用控件TabPanel

    TabPanel控件使用非常简单,但是功能却非常强大,它同MenuPanel.TreePanel一样提供了很多的集合属性,可以定制出丰富的应用.其中用得最多的就是他的Tabs属性,用于定义子标签选项, ...

最新文章

  1. [cpp] 字符数组,字符指针,sizeof,strlen总结
  2. jQuery的Callback()方法
  3. linux进去网卡,Linux上使用socket进行网卡抓包
  4. python读取json格式的超参数
  5. 计算机网络工程应用,全面信息化管理在计算机网络工程的应用
  6. 微信公众平台开发教程第22篇-如何保证access_token长期有效
  7. BAT工程师自研存储引擎,火爆Github!!大家速度顶起来
  8. 地理建模——显著性检验
  9. 盘点近年来的各国各行较知名的互联网安全事件
  10. stm32采集交流电压信号_用STM32采集了64个点的交流信号,如何计算有效值。。
  11. 网络附加存储技术与磁盘阵列柜的对比
  12. [职场人生]求职信常用语句 Useful wording in application letters
  13. CentOS6 Samba服务器配置
  14. 我对IT项目经理工作的理解
  15. JQuery开发手册
  16. 为什么要学数据结构?
  17. “视而不见”—有关不注意视盲现象的研究
  18. react-native-art path代码解析
  19. layui表格取值赋值
  20. 破记录!国产数据库KunDB 单节点TPC-C事务性能超180万tpmC

热门文章

  1. 爆肝一周,用Python在物联网设备上写了个智能语音助手-阿里云智能对话机器人
  2. IDEA 当前项目jdk版本查看
  3. 方舟服务器物品代码,方舟:生存进化 全物品代码ID一览 物品修改代码大全
  4. 18650锂电池保护板接线图_锂电池保护板的原理介绍保护板的构成和主要作用
  5. js打开新窗口Window.open()方法
  6. Latex 之 双栏 末页对齐 -- 导言区加入 \usepackage{flushend}
  7. 即时获取最新全国省市区县地图json数据(亲测可用)以及echarts中使用中国地图
  8. 华为详解海思Hi3716高清机顶盒芯片方案
  9. 即学即用的30个python常用代码
  10. 大陆计算机科学家排名,韩家炜、张宏江2位校友在世界顶尖计算机科学家排名中分别位居华人科学家和中国大陆科学家之首...