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

运行结果如下

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()之后写

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

运行结果如下图


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

时间: 2024-12-28 04:13:43

C语言学习(2)-GTK布局的相关文章

C++语言学习(十三)——C++对象模型分析

C++语言学习(十三)--C++对象模型分析 一.C++对象模型分析 1.类对象模型的内存布局 class是一种特殊的struct,class与struct遵循相同的内存对齐原则,class中的成员函数与成员变量是分开存放的,每个对象拥有独立的成员变量,所有的对象共享类中的成员函数.运行时,类对象退化为结构体的形式:A.所有成员变量在内存中依次排布B.由于内存对齐的存在,成员变量间可能存在内存间隙C.可以通过内存地址访问成员变量D.访问权限关键字在运行时失效 #include <iostream

C++语言学习(十四)——C++类成员函数调用分析

C++语言学习(十四)--C++类成员函数调用分析 一.C++成员函数 1.C++成员函数的编译 C++中的函数在编译时会根据命名空间.类.参数签名等信息进行重新命名,形成新的函数名.函数重命名的过程通过一个特殊的Name Mangling(名字编码)算法来实现.Name Mangling算法是一种可逆的算法,既可以通过现有函数名计算出新函数名,也可以通过新函数名逆向推导出原有函数名.Name Mangling算法可以确保新函数名的唯一性,只要命名空间.所属的类.参数签名等有一个不同,那么产生的

大一上学期C语言学习心得总结

经过一个学期的C语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题.当然,每次成功将问题转换成代码都小有激动,虽然只是在黑框上输出了一些数字或是字符串. 编程,虽然还不是很懂,但总感觉不只是学习知识这么简单,更多给我的感受是它在潜移默化中培养了人的一种能力,用自己的话来讲就是一种”代码能力“.对于同一个问题,让大家去解开答案,可能经过一些纸笔的运算都能得出结果,但是如何把这个问题转化成代码,这就是一种能力,而仅仅是将问题转换成代码,这是较为浅层次的能力,更深层的便是通过优化

Perl语言学习笔记 9 正则表达式处理文本

1.替换 s/PATTERN/REPLACE/; #返回是否替换成功的布尔值 可以使用捕获变量,如:s/(\w)/$1/ 匹配失败则不做任何处理 2.定界符 对于没有左右之分的定界符,重复三次即可,如:s///.s### 对于有左右之分的定界符,需使用两对,一对包含模式,一对包含替换字符串,这两对可以不一样,如:s{}{}.s[]{}.s<>[] 3.可选修饰符 /g可进行全局替换,替换所有匹配到的字符串,如:s/ / /g /s:使得 . 匹配所有字符 /i:大小写无关 4.绑定操作符 $f

go语言学习(五)——面向对象编程

主要讲的是"类"和接口&和其他传统语言不一样的地方挺多的,断断续续看了好几天 下面是我的练习代码 // GoStudy0219 project main.go /* go语言学习--面向对象编程(1) go中类型的值语义和引用语义 结构体(类)的定义和初始化 */ package main import ( "fmt" ) func main() { //几种"类"的初始化 v1 := &character{"Tom&q

Perl语言学习笔记 6 哈希

1.哈希的键是唯一的,值可以重复! 2.访问哈希元素 $hashname{"$key"};#哈希为大括号,数组为方括号,键为字符串 $family_name{"fred"} = "firstd";#给哈希元素赋值 3.哈希键支持任意表达式 $foo = "na"; $family_name{$foo."me"};#获取$family_name{"name"}对应的值 4.访问整个哈希 %

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

关于c语言学习 谭浩强的书

2007-11-16 13:22:58|  分类: PROGRAMME |  标签: |举报 |字号大中小 订阅 广大有志于从事IT行业的同志们,在你们进入这一行之前千万请看这篇文章!太经典了!对你绝对有启发! 千万别买谭浩强和等级考试的书!!!!!! 整理别人的言论,请大家踊跃讨论!!!!!!!!!!!! 1:书皮上面有那么多的牛人题词,估计也许是自己的水平太低. 2:ANSI只给了两种方式:int main(void) {/*...*/}和 int main(int argc, char *

C语言的代码内存布局详解

一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题. BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:在采用段式内存管理的架构中,数据段(da