zoukankan      html  css  js  c++  java
  • C语言学习(2)-GTK布局

    首先了解下gtk中函数的定义格式:

    记住下面几个格式看,下面的代码

    声明变量:GtkAbc*abc=gtk_abc_new()声明控件;

    赋值:gtk_abc_set_label(controlName,value);

    添加到父容器:gtk_container_add(controFather,controlChildl);

    显示控件:gtk_widget_show(controlName);

    一般默认值:gtk_box_pack_start()的后三个 值,一般为FALSE,FALSE,0

     

    1.盒子布局(垂直和水平)

    #include <stdio.h>
    #include<gtk/gtk.h>
    int main(int argc, char *argv[])
    {
        //初始化gtk
        gtk_init(NULL,NULL);
        //定义一个指向window的指针
        GtkWindow*window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        //窗体关闭之后执行
        g_signal_connect(window,"destroy",gtk_main_quit,NULL);
        //设置标题
        gtk_window_set_title(window,"标题");
        //每个被添加的控件都要有show
        gtk_widget_show(window);
    
        //添加一个box,使用垂直布局
        //GTK_ORIENTATION_HORIZONTAL为水平布局
        GtkBox*box=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
        gtk_container_add(window,box);
        gtk_widget_show(box);
        
        GtkLabel*lb1=gtk_label_new("盒子布局");
        gtk_container_add(box,lb1);
        gtk_box_pack_start(box,lb1,FALSE,FALSE,0);
        gtk_widget_show(lb1);
    
        GtkEntry*entry1=gtk_entry_new();
        gtk_container_add(box,entry1);
        gtk_box_pack_start(box,entry1,FALSE,FALSE,0);
        gtk_widget_show(entry1);
    
        GtkButton*btn1=gtk_button_new();
        gtk_button_set_label(btn1,"按钮一");
        gtk_container_add(box,btn1);
        gtk_box_pack_start(box,btn1,FALSE,FALSE,0);
        gtk_widget_show(btn1);
    
        
        gtk_main();
        
        return 0;
    }

    运行结果如下

    image

    2.网格布局

    原理:

    gtk_grid_attach(grid1,btn1,1,2,3,4):
    grid1表示父容器;
    btn1表示被添加的控件;
    1表示该控件距离左边一个网格;
    2表示该控件距离上边两个网格;
    3表示该控件占据3个网格的宽度;
    4表示该控件占据4个网格的高度;

    记住几句话:

    1.网格布局的关键词是Grid
    2.gtk_button_set_label()表示赋值,赋值用 set_label()
    3.gtk_container_add()要在gtk_grid_attach()之后写
    4.所有新创建的控件,都要有show的方法
    5.如果涉及到布局,都要有附加到布局的方法
    #include <stdio.h>
    #include<gtk/gtk.h>
    int main(int argc, char *argv[])
    {
        gtk_init(NULL,NULL);
        GtkWindow*window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(window,"网格布局");
        g_signal_connect(window,"destroy",gtk_main_quit,NULL);
        gtk_widget_show(window);
        //创建一个控件变量
        GtkGrid*grid1=gtk_grid_new();
       //添加到父容器
        gtk_container_add(window,grid1);
       //显示控件
        gtk_widget_show(grid1);
        
       //创建一个控件变量
        GtkButton*btn1=gtk_button_new();
       //为控件赋值
        gtk_button_set_label(btn1,"111111");
      //绑定到布局中
        gtk_grid_attach(grid1,btn1,1,1,1,1);
      //添加到父容器
        gtk_container_add(grid1,btn1);
      //显示控件
        gtk_widget_show(btn1);
        
       //创建一个空间变量
        GtkButton*btn2=gtk_button_new();
       //给该控件赋值
        gtk_button_set_label(btn2,"222222");
       //绑定到布局中
        gtk_grid_attach(grid1,btn2,0,0,1,1);
       //添加到父容器中
        gtk_container_add(grid1,btn2);
       //显示控件
        gtk_widget_show(btn2);
        
    
        gtk_main();    
        return 0;
    }

    运行结果如下图

    image

    今天,就写这么多了;我的目标并不高,希望每天写一篇,具体细节等学习深入了,再慢慢补充。

    更多精彩内容请看:http://www.cnblogs.com/2star
  • 相关阅读:
    快速排序
    visio中相关设置菜单视图
    Visio中ShapeAdded和SelectionAdded
    VB托盘图标不响应WM_MOUSEMOVE的原因及解决方法
    visio应用程序相关设置选项视图
    直接插入排序的三种实现
    计算机存储的大小端模式解析
    直接选择排序及交换二个数据的正确实现
    用Apache Velocity模板引擎速造网站
    同一份代码打成多种包(JAR/WAR/EAR)时,如果不用classifier会产生什么有趣效果?
  • 原文地址:https://www.cnblogs.com/kimisme/p/4192515.html
Copyright © 2011-2022 走看看