容器之笔记本构件演示

news2024/11/25 10:39:17

代码:

#include <gtk-2.0/gtk/gtk.h>
#include <glib-2.0/glib.h>
#include <gtk-2.0/gdk/gdkkeysyms.h>
#include <stdio.h>

void rotate_book(GtkButton *button, GtkNotebook *notebook) {
	gtk_notebook_set_tab_pos(notebook, (notebook->tab_pos + 1) % 4);
}

void tabsborder_book(GtkButton *button, GtkNotebook *notebook) {
	gint tval = FALSE;
	gint bval = FALSE;
	if (notebook->show_tabs == 0)
		tval = TRUE;
	if (notebook->show_border == 0)
		bval = TRUE;

	gtk_notebook_set_show_tabs(notebook, tval);
	gtk_notebook_set_show_border(notebook, bval);
}

void remove_book(GtkButton *button, GtkNotebook *notebook) {
	gint page;

	page = gtk_notebook_get_current_page(notebook);
	gtk_notebook_remove_page(notebook, page);
	gtk_widget_queue_draw(GTK_WIDGET(notebook));
}

int main(int argc, char *argv[]) {
	gtk_init(&argc, &argv);

	GtkWidget *window;
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window), "笔记本构件演示");
	gtk_container_set_border_width (GTK_CONTAINER (window), 10);

	gtk_widget_show(window);

	int i;
	char bufferf[32];
	char bufferl[32];

	GtkWidget *button;
	GtkWidget *table;
	GtkWidget *notebook;
	GtkWidget *frame;
	GtkWidget *label;
	GtkWidget *checkbutton;
	GtkWidget *vbox;
	vbox = gtk_vbox_new(FALSE, 15);
	gtk_widget_show(vbox);

	table = gtk_table_new(3, 6, FALSE);
	gtk_container_add(GTK_CONTAINER(window), table);

	notebook = gtk_notebook_new();
	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_LEFT);
	gtk_table_attach_defaults(GTK_TABLE(table), notebook, 0, 6, 0, 1);
	gtk_widget_show(notebook);

	for (i = 0; i < 5; i++) {
		sprintf(bufferf, "选项卡 %d", i + 1);
		sprintf(bufferl, "选项卡 %d", i + 1);

		frame = gtk_frame_new(bufferf);
		gtk_container_set_border_width(GTK_CONTAINER(frame), 10);
		gtk_widget_set_size_request(frame, 100, 75);
		gtk_widget_show(frame);

		label = gtk_label_new(bufferf);
		gtk_container_add(GTK_CONTAINER(frame), label);
		gtk_widget_show(label);

		label = gtk_label_new(bufferl);
		gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, label);
	}

	checkbutton = gtk_check_button_new_with_label("Check me please!");
	gtk_widget_set_size_request(checkbutton, 100, 75);
	gtk_widget_show(checkbutton);

	label = gtk_label_new("插入页");
	gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), checkbutton, label, 2);

	for (i = 0; i < 5; i++) {
		sprintf(bufferf, "反向添加的选项卡 %d", i + 1);
		sprintf(bufferl, "反向添加的选项卡 %d", i + 1);

		frame = gtk_frame_new(bufferf);
		gtk_container_set_border_width(GTK_CONTAINER(frame), 10);
		gtk_widget_set_size_request(frame, 100, 75);
		gtk_widget_show(frame);

		label = gtk_label_new(bufferf);
		gtk_container_add(GTK_CONTAINER(frame), label);
		gtk_widget_show(label);

		label = gtk_label_new(bufferl);
		gtk_notebook_prepend_page(GTK_NOTEBOOK(notebook), frame, label);
	}

	gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 3);

	button = gtk_button_new_with_label("关闭");
	g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_main_quit),
			NULL);
	gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 1, 1, 2);
	gtk_widget_show(button);

	button = gtk_button_new_with_label("下翻页");
	g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(
			gtk_notebook_next_page), notebook);
	gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 1, 2);
	gtk_widget_show(button);

	button = gtk_button_new_with_label("上翻页");
	g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(
			gtk_notebook_prev_page), notebook);
	gtk_table_attach_defaults(GTK_TABLE(table), button, 2, 3, 1, 2);
	gtk_widget_show(button);

	button = gtk_button_new_with_label("改变标签位置");
	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(rotate_book),
			notebook);
	gtk_table_attach_defaults(GTK_TABLE(table), button, 3, 4, 1, 2);
	gtk_widget_show(button);

	button = gtk_button_new_with_label("显示/隐藏边框");
	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(tabsborder_book),
			notebook);
	gtk_table_attach_defaults(GTK_TABLE(table), button, 4, 5, 1, 2);
	gtk_widget_show(button);

	button = gtk_button_new_with_label("删除选项卡");
	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(remove_book),
			notebook);
	gtk_table_attach_defaults(GTK_TABLE(table), button, 5, 6, 1, 2);
	gtk_widget_show(button);

	gtk_widget_show(table);


	g_signal_connect(G_OBJECT(window), "delete_event",
			G_CALLBACK(gtk_main_quit), NULL);
	gtk_main();
	return 0;
}

编译运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL进阶——SQL优化

目录 1插入数据 1.1 insert 1.2大批量插入数据 2主键优化 3 order by 优化 4 group by 优化 5 limit 优化 6 count 优化 6.1概述 6.2 count用法 7 update优化 1插入数据 1.1 insert 优化方案主要有3种 批量插入数据 Insert into tb_test values(1,Tom),(2,Cat)…

详解 ClickHouse 的副本机制

一、简介 副本功能只支持 MergeTree Family 的表引擎&#xff0c;参考文档&#xff1a;https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ ClickHouse 副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#…

Web渗透-CSRF跨站请求伪造

跨站请求伪造&#xff08;Cross-Site Request Forgery&#xff0c;CSRF&#xff09;是一种网络攻击&#xff0c;通过利用受害者的身份认证状态在不知情的情况下执行恶意操作。通常&#xff0c;这种攻击会诱使用户点击恶意链接或访问一个特制的网站&#xff0c;从而触发不被用户…

python库BeeWare,一个如雷贯耳的可以创建原生应用程序的库

目录 BeeWare 包括以下主要组件和工具&#xff1a; 创建BeeWare虚拟环境 配置BeeWare 创建一个新的BeeWare项目&#xff08; Hello World! &#xff09; 尝试 Hello World 样例 BeeWare 是一个开源项目&#xff0c;旨在帮助开发者使用 Python 创建原生应用程序&#xff0c;…

后端路线指导(4):后端春招秋招经验分享

后端春招&秋招经验分享 春招(暑期实习) /秋招是应届生非常重要的应聘时间,每一个想就业的同学一定要有所了解! 本篇内容&#xff0c;老白将与大家分享暑期实习和秋招如何应对招聘的个人经验&#xff0c;希望每个同学看完都能有所收获! 首先说明一下老白对于面试核心竞争力的…

Android图片圆角转换 RoundedImageView开源项目 小记

属性的意义: makeramen:border_width“2dip” 表示图片的边框宽度为2个dp makeramen: corner_radius表示为 图片转圆角的弧度 修改 makeramen:corner_radius“100dip” 当 corner_radius 设置为100dp 的时候 会呈现为圆形 . ( 注: com.makeramen.rounded.Ro…

MySQL表的增删改查初阶(下篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

多重排序【今日题记】

多重排序 多重排序题目分析思路代码代码结构体知识多重排序 需要对多个条件进行排序,因此可以称之为多重排序。 题目 某生物实验室记录了n种(n<=1000)病毒信息,每种病毒都有编号、传染性和致病性三个基本信息,编号是1000-9999的人工编号,其中的传染性和致病性是用0-10…

SVN学习(002 svn冲突解决)

尚硅谷SVN高级教程(svn操作详解) 总时长 4:53:00 共72P 此文章包含第20p-第p29的内容 冲突 产生冲突的操作 &#xff08;第一种 相互不影响的操作&#xff09; 用户1修改第二行 用户2修改第四行 用户1提交 用户2提交&#xff0c;提交的时候会提示版本已过时 这时将用…

力扣SQL 即时食物配送 II min函数 嵌套查询

Problem: 1174. 即时食物配送 II &#x1f468;‍&#x1f3eb; 参考题解 Code -- 计算立即配送的订单百分比 select round (-- 计算订单日期与客户偏好配送日期相同的订单数量sum(case when order_date customer_pref_delivery_date then 1 else 0 end) * 100 /-- 计算总订…

掌握Three.js:学习路线,成为3D可视化开发的高手!

学习Three.js可以按照以下路线进行&#xff1a; 基础知识&#xff1a; 首先要了解基本的Web开发知识&#xff0c;包括HTML、CSS和JavaScript。如果对这些知识已经比较熟悉&#xff0c;可以直接进入下一步。 Three.js文档&#xff1a; 阅读Three.js官方文档是学习的第一步。官…

如何下载和安装SQLynx数据库管理工具? (MySQL作为测试数据库)

目录 1. 官网下载 2. 安装软件 3. 启动SQLynx软件 4. 开始使用 5. 执行第一条SQL语句 6. 总结 SQLynx是一款先进的Web SQL集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为数据库管理、查询和数据分析设计。作为一个基于浏览器的工具&#xff08;同时也支持桌面…

掌握 NumPy:高效数组处理综合指南(第 1/2 部分)

掌握 NumPy&#xff1a;高效数组处理综合指南&#xff08;第 1/2 部分&#xff09; 文章目录 一、介绍二、什么是Numpy&#xff0c;我们为什么要使用它&#xff1f;三. 数组初始化四. 计算速度和内存使用量五、内存使用情况六、数据类型七、索引和切片 一、介绍 你们以前听说过…

连接和断开信号演示之二

代码; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>void button_press(GtkEventBox *ebox,GdkEventButton *event,GtkLabel *label) {const char *citem;switch(event->type…

[图解]建模相关的基础知识-15

1 00:00:01,030 --> 00:00:05,820 接下来&#xff0c;我们就开始讲解的知识点 2 00:00:05,830 --> 00:00:11,810 就是范式知识点 3 00:00:12,130 --> 00:00:17,490 关系这个理论里面&#xff0c;随着历史的发展 4 00:00:17,700 --> 00:00:21,280 它发展出很多的…

力扣随机一题 模拟+字符串

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 1910.删除一个字符串中所有出现的给定子字符串【中等】 题目&#xff1a; …

基于STM32的智能工厂环境监测系统

目录 引言环境准备智能工厂环境监测系统基础代码实现&#xff1a;实现智能工厂环境监测系统 4.1 数据采集模块4.2 数据处理4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能工厂管理与优化问题解决方案与优化收尾与总结 1. 引言 智能工厂环境监测系统通过…

【转】FreeRTOS通用移植,以keil和IAR工程 M7核为例

目录 keil: IAR keil: 原文在https://bbs.eeworld.com.cn/thread-1281875-1-1.html 本篇讲述移植FreeRTOS,并创建运行一个任务&#xff0c;对象芯片为M7系列的兆易创新GD32H7xx系列。 一.准备工作 1.下载FreeRTOS源码官网 http://www.freertos.org/ 或者托管网站FreeRTOS…

Vue71-嵌套(多级)路由

一、需求 二、开发步骤 2-1、编写路由组件 2-2、编写路由规则 2-3、编写路由标签<router-link>、<router-view> 三、小结

(vue3)基于vite+vue3+element-plus项目创建

(vue3)基于vitevue3element-plus项目创建 vue.js官方中文文档&#xff1a;https://cn.vuejs.org/guide/quick-start.html vite官方中文文档&#xff1a;https://cn.vitejs.dev/guide/ element-plus官网&#xff1a;https://element-plus.org/zh-CN/guide/installation.html 第…