当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

03版怎么插入指定宏的按扭控件?总结很全面速看!用GTK+来创建一个带界面的C语言程序4—给窗口添加多个控件

向窗口添加按钮已经知道如何执行,但窗口程序不能只有一个按钮控件。如果继续向窗口添加按钮,程序错误将发生,因为只能容纳一个控件。

而要容纳多个控件那又该怎么做呢?我们知道容器分为两种,能容纳多个控件的容器和只能容纳一个控件的容器,窗口就属于只能容纳一个控件的容器,那么就可以这么做,先把控件放到能容纳多个控件的容器中,然后在把这个容器放到窗口容器中,不就能达到放多个控件的目的了吗。那么就一起来了解一下能容纳多个控件的容器吧。

GTK+中能容纳多个控件的容器有很多,例如有盒状容器(GtkBox)、格状容器(GtkTable)、按钮盒(GtkButtonBox)、分割面板(GtkPanel)、固定布局(GtkFixed)、工具栏(GtkToolbar)等,其中最常用的就是盒状和格状布局。那么就先来认识一下盒状容器吧。

盒状容器顾名思义就是一种按照一定顺序和方向紧密排列多个控件的容器。然后在盒状容器的基础上又可以分为纵向盒状容器(GtkVBox)和横向盒状容器(GtkHBox),两者处了创建和排列控件的方式不一样之外,其使用方式是一样的,没有差别。我们就以添加多个按钮为例。

给窗口添加多个按钮

/*用盒状容器排列按钮*/

#include <gtk;

int main(int argc, char * argv[])

{

GtkWidget * window;

GtkWidget * vbox;

GtkWidget * hbox;

GtkWidget * button;

gchar * title = "盒状容器";

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);

gtk_window_set_title(GTK_WINDOW(window), title);

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

gtk_container_set_border_width(GTK_CONTAINER(window), 20);

//创建一个垂直盒子容器

vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

//创建一个水平盒子容器

hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

button = gtk_button_new_with_label("按钮一");

//将按钮控件加入到盒子容器中

gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 3);

button = gtk_button_new_with_label("按钮二");

gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 3);

gtk_container_add(GTK_CONTAINER(vbox), hbox);

button = gtk_button_new_with_label("按钮三");

gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 3);

gtk_container_add(GTK_CONTAINER(window), vbox);

gtk_widget_show_all(window);

gtk_main();

return FALSE;

}

编辑Makefile文件,并在终端执行make命令开始编译,执行./GtkBox即可运行此程序,运行结果:

窗口显示多个按钮

代码分析:

1. 盒状容器

这段代码中我们定义了两个盒状容器的控件指针vbox, hbox, 在处理好窗口内容设置后开始创建盒状容器,创建盒状容器的函数为gtk_box_new(),其函数原型为:

int gtk_box_new(int orientation, int spacing)

orentation:盒子的方向,有两个可选值:GTK_ORIENTATION_HORIZONTAL(水平横向)、GTK_ORIENTATION_VERTICAL(垂直纵向)

spacing:容器中控件之间的间隙,通常为0,单位像素。

创建完盒子容器后,就可以向其中添加其他控件了。向盒状容器中添加控件可以使用我们以前用过的gtk_container_add函数,但是这样只能加一个控件。还有就是本例中的方法:gtk_box_pack_*系列函数向盒状容器中添加并排列控件,这样的函数一共有4个,分别是:gtk_box_pack_start、gtk_box_pack_end、gtk_box_pack_start_defaults、gtk_box_pack_end_defaults。

gtk_box_pack_start、gtk_box_pack_end分别表示按顺序从前到后依次排列和从后到前依次排列。就拿gtk_box_pack_start这个函数举例,其函数原型为:void gtk_box_pack_start(int box, int child,boolean expand, boolean fill, int padding)

box:要容纳控件的容器对象

child:被容纳控件的指针

expand:是否扩展,一般为FALSE

fill:是否添加

padding:与前一个控件的间隔

如果不考虑控件间的间隔、是否扩展和是否添充的话还可以使用函数 gtk_box_pack_start_defaults 和 gtk_box_pack_end_defaults。这两函数只有两个参数,即容器对象指针和被容纳对象指针,即gtk_box_pack_start_defaults(GTK_BOX(box),button);即可。

注意,由于我们创建的是盒状容器Box,而这些函数操作对象是Box,所以一定不要忘了用 GTK_BOX 宏转换一下,否则编译时会出警告信息,程序也会变得不稳定。

2. 创建按钮

这段代码中只定义了一个控件指针 button,我们这里却创建了 4 个按钮,因为每个按钮创建之后就不再对它操作了(即不再明确使用这个指针),所以下一个按钮创建时还会为这个指针赋值,这在 GTK+中是允许的。这样做有利有弊,利在于只声明了一个指针变量,代码行数减少了;弊则是如果分别对这几个按钮操作必需再声明不同名称的变量。

3. 显示所有控件

前面代码中每一个控件都要用函数 gtk_widget_show 来显示,如果还用这个函数来显示控件的话,那么我们的代码还得增加 6 行,这使得代码冗长且不便于维护。这里采用了gtk_widget_show_all 函数,它的参数是一个容器控件的指针,它取代了那 6 行代码(甚至更多行代码),显示容器中所有控件。这样一来使代码更简洁明了,一看就懂。

1.《03版怎么插入指定宏的按扭控件?总结很全面速看!用GTK+来创建一个带界面的C语言程序4—给窗口添加多个控件》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《03版怎么插入指定宏的按扭控件?总结很全面速看!用GTK+来创建一个带界面的C语言程序4—给窗口添加多个控件》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2095729.html

上一篇

007夜火怎么飞?我来告诉你答案转载·七律·她(10首)

下一篇

.tar结尾如何解压?总结很全面速看!tar命令详解:用于对文件进行打包压缩或解压

03版怎么插入指定宏的按扭控件?总结很全面速看!wps中设置数值调节框,你还找不到吗?让你的日历动起来

03版怎么插入指定宏的按扭控件?总结很全面速看!wps中设置数值调节框,你还找不到吗?让你的日历动起来

03版怎么插入指定宏的按扭控件相关介绍,好不容易做了公司2020年的日历,想设置时间变化的动态调整框,在wps开发工具下面插入了数字调整框,找不到设置调整值的按钮吗?老板:不会是用了假的wps表格吧? 带着疑问,我逐一浏览wps菜单栏,在“...

03版怎么插入指定宏的按扭控件?终于找到答案了word文档中各种控件插入教程

03版怎么插入指定宏的按扭控件?终于找到答案了word文档中各种控件插入教程

03版怎么插入指定宏的按扭控件相关介绍,软件版本:软件大小:软件许可证:适用平台:1、首先打开word、新建空白文档或打开现有文档 2、在菜单栏上,单击“工具”-“宏”-“visual basic编辑器”,或按快捷键Alt F11 4.然后...

03版怎么插入指定宏的按扭控件?终于找到答案了EXCEL开发工具功能应用,数据查询必备控件,轻松操作无压力

03版怎么插入指定宏的按扭控件?终于找到答案了EXCEL开发工具功能应用,数据查询必备控件,轻松操作无压力

03版怎么插入指定宏的按扭控件相关介绍,你好,hello们,我来帮你们。今天共享EXCEL开发工具功能应用程序、数据查询所需的控件,可以轻松操作,没有压力。 有个好消息!为了方便大家更快的掌握技巧,寻找捷径。请大家点击文章末尾的“了解更多”...

03版怎么插入指定宏的按扭控件看这里!值得你收藏的Excel最全“录制宏”教程

03版怎么插入指定宏的按扭控件看这里!值得你收藏的Excel最全“录制宏”教程

03版怎么插入指定宏的按扭控件相关介绍,环境准备:Excel2010/2013/2016 准备好工作的童鞋可以开工。 步骤: 步骤1.打开EXCEL后,找到EXCEL主窗口的状态栏,就绪 右边第一个图标,左上角有红色圆点的那个,这个图标名字...

03版怎么插入指定宏的按扭控件?我来告诉你答案值得你收藏的Excel最全“录制宏”教程

03版怎么插入指定宏的按扭控件?我来告诉你答案值得你收藏的Excel最全“录制宏”教程

03版怎么插入指定宏的按扭控件相关介绍,准备环境:Excel2010/2013/2016 准备工作好的童鞋可以开工了。 达到当天最大量API KEY 超过次数限制 步骤: 步骤1.打开EXCEL后,找到EXCEL主窗口的状态栏,就绪 右边第...

关于03版怎么插入指定宏的按扭控件,你需要知道这些Excel使用VAB代码建立宏控件,每打印一次自动递增一次编号

关于03版怎么插入指定宏的按扭控件,你需要知道这些Excel使用VAB代码建立宏控件,每打印一次自动递增一次编号

03版怎么插入指定宏的按扭控件相关介绍,情况:每次单击“打印”按钮时,打印完成后,编号输入框值将自动增加1 操作: 1.在excel中,I2是数字变化单元格,通过在数字格式“000,数字前添加”符号 2.在“表1”表名上单击鼠标右键以查看代...