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

9 篇文章 2 订阅
7 篇文章 12 订阅

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

FLTK中的坐标

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

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提供了以下几种用于处理文本的控件:

容器控件

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

因为在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-回调函数

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FLTK中,可以使用文本框或输入框来输入大量数据,然后使用按钮或键盘事件来触发计算。具体步骤如下: 1. 创建文本框或输入框,用于输入数据。可以使用Fl_Input、Fl_Text_Input、Fl_Multiline_Input等控件。 2. 创建计算按钮或键盘事件,用于触发计算。可以使用Fl_Button、Fl_Return_Key等控件。 3. 在计算按钮或键盘事件的回调函数中,获取输入框中的数据,进行计算,并将结果显示在另一个文本框或标签中。可以使用Fl_Output、Fl_Text_Display等控件。 例如,下面是一个简单的FLTK程序,用于计算两个输入框中的数值之和: ```c++ #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Input.H> #include <FL/Fl_Button.H> #include <FL/Fl_Output.H> // 回调函数,计算两个输入框中的数值之和 void sum_callback(Fl_Widget* widget, void* data) { Fl_Input* input1 = (Fl_Input*)data; Fl_Input* input2 = (Fl_Input*)data + 1; Fl_Output* output = (Fl_Output*)data + 2; double num1 = atof(input1->value()); double num2 = atof(input2->value()); double sum = num1 + num2; char buffer[32]; sprintf(buffer, "%.2f", sum); output->value(buffer); } int main(int argc, char **argv) { Fl_Window* window = new Fl_Window(300, 200, "FLTK Sum"); Fl_Input* input1 = new Fl_Input(70, 30, 150, 30, "Number 1:"); Fl_Input* input2 = new Fl_Input(70, 70, 150, 30, "Number 2:"); Fl_Button* button = new Fl_Button(100, 110, 100, 30, "Calculate"); Fl_Output* output = new Fl_Output(70, 150, 150, 30, "Sum:"); // 绑定回调函数到按钮上 button->callback(sum_callback, (void*)(input1, input2, output)); window->end(); window->show(argc, argv); return Fl::run(); } ``` 在上面的程序中,我们创建了两个输入框(input1和input2)、一个计算按钮(button)和一个输出框(output),并将它们放置在窗口中。然后,我们将sum_callback回调函数绑定到计算按钮上,并在回调函数中获取输入框中的数值,进行计算,并将结果显示在输出框中。最后,我们调用Fl::run()函数启动FLTK事件循环,等待用户的操作。 当用户点击计算按钮时,FLTK会自动调用sum_callback回调函数,将按钮控件和用户数据作为参数传递给回调函数。在回调函数中,我们首先通过data指针获取输入框和输出框的指针,然后使用atof函数将输入框中的字符串转换为浮点数,进行加法运算,并将结果转换为字符串,显示在输出框中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值