在我们使用gtk这个工具时,有时想在同一个窗口中,根据选择来显示不同的操作菜单,这篇博文主要是解决此类问题

//创建窗口
GtkWidget *CreateMenuMain()
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *fixed;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
char title[] = "test";
gtk_window_set_title(window,title);
gtk_widget_set_usize(GTK_WINDOW(window),500,400);
change_background(window,500,400,"play1.jpg");
gtk_signal_connect(GTK_OBJECT(window),"delete_event",G_CALLBACK(gtk_ main_quit),NULL); button = gtk_button_new_with_label("切换菜单");
gtk_widget_set_usize(GTK_BUTTON(button),100,100)
fixed = gtk_fixed_new();
gtk_fixed_put(GTK_FIXED(fixed),button);
gtk_container_add(GTK_CONTAINER(window),fixed);
gtk_fixed_put(GTK_FIXED(fixed),button,250,200);
gtk_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(button_deal),fixed);
gtk_widget_show_all(window);
}
//按钮的回调函数
void button_deal(GtkWidget *button,gpointer)
{
GtkFixed *fixed_del = (GtkFixed *)data//进行类型强转
gtk_container_remove(GTK_CONTAINER(window),fixed_del);
GtkWidget *fixed;
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window),fixed);
gtk_widget_show_all(window);
}

其实也很简单,就是用gtk_container_remove()函数将原本的构件移除,再向窗口中添加新的构件。希望能帮你解决问题。

linux中的gtk 编程的页面切换的更多相关文章

  1. 浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程【转】

    本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linu ...

  2. Android中使用ViewPager实现屏幕页面切换和页面切换效果

    之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpag ...

  3. 每天进步一点点——论fork()函数与Linux中的多线程编程

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/27316803 一.fork()函数     在操作系统的基本概念中进程是程序的一次运行,且是 ...

  4. Android中使用ViewFlipper实现屏幕页面切换(关于坐标轴的问题已补充更改)

    屏幕切换指的是在同一个Activity内屏幕间的切换,ViewFlipper继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果.如 ...

  5. 定制linux中的Gtk theme<一>如何设置窗口按钮的多态效果

    GTK主题之个人理解: GTK 主题引擎(包含代码所需的图形元素) +  主题配置文件(gtkrc文件)+ 数据资源文件(如图片等)    三者所呈现给用户的视觉风格效果 GTK拥有一套大量的widg ...

  6. linux中c语言编程main函数和参数

    linux下main函数的的标准调用函数的标准形式 int main(int char,char *argv[]) 在main函数的两个参数中,argc必须是整型变量,其是命令行的参数的数目,argv ...

  7. linux中的shell编程----基础

    1,运行shell脚本有两种办法一般有两种: 先给可执行权限,再进入文件所在的目录,输入:./name.sh: 运行解释器再执行脚本:/bin/sh name.sh,这种情况下,脚本中可以没有#!/b ...

  8. linux中tab键不能补全,却能切换窗口

    linux中所有程序-设置-窗口管理器-键盘-切换同一应用程序的窗口-清除

  9. Linux 应用层的时间编程【转】

    转自:https://blog.csdn.net/chinalj2009/article/details/21223681 浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层 ...

随机推荐

  1. Java之大数相加

    之前参加某公司笔试,机试题目是大数相加,两大数是字符串形式,求和. 当时讨巧用的是BigDecimal类,但是发迷糊了,以为b1.add(b2)后,和就加到b1上了,结果一直输出不对. 其实应该是这样 ...

  2. MDN Browser Compatibility Report 2020

    MDN Browser Compatibility Report 2020 top pain point https://mdn-web-dna.s3-us-west-2.amazonaws.com/ ...

  3. node.js & create file

    node.js & create file node js create file if not exists https://nodejs.org/api/fs.html#fs_fs_ope ...

  4. svg all in one

    svg all in one show svg in html methods https://vecta.io/blog/best-way-to-embed-svg https://css-tric ...

  5. 聊聊CacheLine

    本文转载自聊聊CacheLine 导语 文章聊聊缓存一致性协议中我们提到过,缓存里面最小的单位是缓存行/缓存条目,但是缓存中的具体存储结构是什么样的,缓存行中有存放的是什么?在缓存中是如何寻找指定是还 ...

  6. eclipse定制工具栏,修改工具栏

    目前eclipse定制工具栏的入口就是window- customize perspective,在弹出的窗口中选择Tool Bar Visibility,选择要在工具栏中显示的快捷图标.注:在Too ...

  7. TkMybatis添加对象后返回数据的id

    在实体类的id属性上加上下面的注解 //导入的包import javax.persistence.GeneratedValue; @GeneratedValue(generator = "J ...

  8. eclipse安装mybatis的插件

    在help中打开Eclipse Marketplace... 输入mybatis后搜索,点击install即可 功能说明: 1.查找某一个方法 在dao接口中 按住Ctrl键,鼠标指到方法名称上 选择 ...

  9. centos 修改系统时间

    centos 修改系统时间 [echo0282@instance-1 ~]$ sudo timedatectl set-timezone Asia/Shanghai   timedatefctl li ...

  10. 控制流程-if/while/for

    目录 一.控制流程之if判断 1.单分支结构 2.双分支结构 3.多分支结构 二.控制流程之while循环 1.基本使用 2.break 3.continue 三.流程控制之for循环 1.break ...