容器之笔记本构件演示

代码:

#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;
}

编译运行

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux驱动开发(三)--新字符设备驱动开发 LED驱动开发升级

1、新字符设备驱动原理 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可&#xff0c;但是这样会 带来两个问题 需要我们事先确定好哪些主设备号没有使用 会将一个主设备号下的所有次设备号都使用掉&#xff0c;比如现在设置 LED 这个主设备号为200&…

这周,接连两位程序员猝死...

这周接连发生了两起不幸的事。俩位程序员去世的消息&#xff0c;深感悲伤和惋惜。 6月17号下午&#xff0c;一位负责研发的女员工在虾皮研发中心办公室猝死&#xff0c;年仅 30 岁。 官方通告&#xff1a; 同一天&#xff0c;另一位科大讯飞的高级测试工程师在家突发不适离世…

UDS服务——TransferData (0x36)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍TransferData (0x36)—— 数据传输,用于下载/上传数据时用的,数据的传输方向由不同的服务控制:0x34服务表示下载,0x35服务表示上传。通过阅读本文,希望能对你有所帮助。 文章目录 诊断协议那些事儿传输数据服务…

Xshell7免费版下载安装使用

​一、下载安装​ 1.打开官网下载 https://www.xshell.com/zh/free-for-home-school/ 2.选择合适的下载路径&#xff0c;点击下载按钮&#xff0c;然后按照提示完成安装。 二、Xshell7的使用&#xff0c;Xhell连接Linux 1.连接之前&#xff0c;确保在Linux中开启SSH。参考&a…

VBA学习(15):工作表加密保护后却把密码忘记了?

今天把过去的一篇推文重新整理一下&#xff0c;提供两种解除工作表加密的方法。 一种是傻瓜模式的VBA&#xff0c;复制运行以下代码&#xff0c;即可抹除当前工作簿所有工作表的保护加密。 Sub UnProtct()MsgBox "破解提示&#xff1a;当要求输入密码时请点击取消&#…

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

在探索现代 JavaScript 生态系统时&#xff0c;我们常常会遇到新兴技术的快速迭代和改进。其中&#xff0c;包管理工具的发展尤为重要&#xff0c;因为它们直接影响开发效率和项目性能。最近&#xff0c;pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 np…

激励-保健理论和公平理论

激励-保健理论 herzberg的激励-保健理论中&#xff0c;保健因素是context of a job&#xff0c;激励因素是content of a job。 context of a job是受组织控制的因素&#xff0c;比如工作条件&#xff0c;基本工资&#xff0c;公司政策等&#xff0c;个人无法支配。content of…

【深入浅出MySQL】「数据同步架构」分析探索Canal开源技术原理和架构

分析探索Canal开源技术原理和架构 背景说明Canal基本介绍Canal作用方向MySQL同步原理Binlog Dump交互Binlog的协议模型Canal的模拟slave角色Canal的消费订阅 Canal Server模块Canal Instance模块参考资料类似开源项目 背景说明 在早期阶段&#xff0c;阿里巴巴B2B公司由于其在…

WPF文本框中加提示语

效果&#xff1a; WPF中貌似不能像winfrom里一样直接加提示语&#xff0c;需要使用TextBox.Style&#xff0c;将Trigger标签插入进去。 贴源码&#xff1a; <WrapPanel Name"TakeOverExpressNo1"><Label Content"物流单号&#xff1a;"><…

力扣SQL50 每月交易 I 求和 SUM(条件表达式) DATE_FORMAT(日期,指定日期格式)

Problem: 1193. 每月交易 I &#x1f468;‍&#x1f3eb; 参考题解 Code select DATE_FORMAT(trans_date, %Y-%m) AS month,country,count(*) as trans_count,count(if(state approved, 1, NULL)) as approved_count,sum(amount) as trans_total_amount,sum(if(state appr…

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

目录 一、漏洞简介 漏洞原理 影响版本 二、漏洞复现 三、复现过程 1、扫描局域网内的C段主机&#xff08;主机发现&#xff09; 扫描结果&#xff1a; 2.使用MSF的永恒之蓝漏洞模块 3.对主机进行扫描&#xff0c;查看其是否有永恒之蓝漏洞 4.准备攻击 四、漏洞利用 …

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口&#xff0c;成为被动接口后&#xff0c;将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息&#xff0c;即已运行在OSPF协议…

【泛微系统】解决启动非标功能时提示客户ID不一致的问题

解决启动非标时提示CID不一致的问题 泛微OA系统是一个非常丰富的系统,我们在日常工作中会经常遇到很多业务需求,我们会用到很多功能来承载这些需求的实现;OA系统里有标准功能,也有非标准的功能;对于非标准的功能需要打非标补丁包; 有些同学在个人学习系统的过程中会安装本…

[图解]企业应用架构模式2024新译本讲解16-行数据入口2

1 00:00:00,750 --> 00:00:02,470 好&#xff0c;我们来看代码 2 00:00:03,430 --> 00:00:06,070 我们一步一步执行 3 00:00:42,500 --> 00:00:45,000 先初始化数据 4 00:00:52,300 --> 00:00:53,650 创建连接 5 00:00:55,900 --> 00:00:56,970 这里面 6 0…

Electron快速入门(二):在(一)的基础上修改两个文件完成自定义显示时间和天气的标题栏

修改主进程:main.js // main.jsconst { app, BrowserWindow } = require("electron"); const path = require("node:path"); const createWindow = () => {try {const mainWindow = new BrowserWindow({width: 1200,height: 870,alwaysOnTop: true,fr…

aws的alb,多个域名绑定多个网站实践

例如首次创建的alb负载均衡只有www.xxx.com 需要添加 负载 test2.xxx.com aws的Route 53产品解析到负载均衡 www.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx test2.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx 主要介绍目标组和规则 创建alb就不介…

【报错解决】引入@ComponentScan注解注册bean容器后,导致的接口404问题

引入ComponentScan注解注册bean容器后&#xff0c;导致的接口404问题 背景 由于微服务开发中&#xff0c;经常需要在公共模块在引入一些公共模块&#xff0c;供其他服务使用&#xff0c;但是其他服务需要在启动类中配置ComponentScan注解扫描这个公共模块下注册的 bean&#…

sdlan如何智能组网?

【天联】组网是一款异地组网内网穿透产品&#xff0c;由北京金万维科技有限公司自主研发&#xff0c;旨在解决不同地区电脑与电脑、设备与设备、电脑与设备之间的信息远程通信问题。【天联】的操作简单、跨平台应用、无网络要求以及独创的安全加速方案等特点&#xff0c;使得它…

全国实体商铺店铺商家采集工具,一键采集商家手机号,让你轻松找到目标客户

随着互联网的发展&#xff0c;越来越多的商家开始在网上开展业务&#xff0c;实体商铺的竞争也日益激烈。为了更好地吸引客户&#xff0c;很多商家都选择了线上推广和营销。然而&#xff0c;仅仅依靠线上推广是远远不够的&#xff0c;线下的实体商铺也需要积极拓展客源。因此&a…

C语言学习记录20240622

这次需要用 C 语言库 Allegro 写爆破彗星游戏。项目有一些描述如需要绘制飞船、彗星、子弹&#xff0c;需要响应按键实现飞船加速、减速、转向、开火&#xff0c;需要绘制弹道&#xff0c;需要实现彗星旋转、缩放&#xff0c;需要碰撞检测&#xff0c;需要显示计分。 这些用 w…