GUI入门第一步

GUI入门第一步

1.直接使用gcc命令或者编写Makefile来编译

编译的时候需要加上:
pkg-config --cflags --libs gtk+-2.0

为数字1键前面那个字符 )
如: gcc demo.c -o demo pkg-config --cflags --libs gtk+-2.0

解释:pkg-config --cflags --libs gtk+-2.0
自动获得预处理参数,如宏定义,头文件的位置
自动获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。

2.类型的强制转换:用类型的前两个单词的全大写形式
例如:·GTKWIDGET(window)可以把window类型转化为gtkwidget

窗口的详细设置

窗口的创建
GtkWidget *gtk_window_new(GtkWindowType type);
GtkWindowType是一个枚举,有两种情况:
GTK_WINDOW_TOPLEVEL:有边框
GTK_WINDOW_POPUP: 没边框

标题的设置
void gtk_window_set_title(GtkWindow *window, const gchar *title);

窗口最小大小的设置
void gtk_widget_set_size_request(GtkWidget *widget,gint width,gint height);

窗口伸缩设置( FALSE为不可伸缩 )
void gtk_window_set_resizable(GtkWindow *window, gboolean resizable);

显示或隐藏所有控件
void gtk_widget_show_all(GtkWidget *widget);
void gtk_widget_hide_all(GtkWidget *widget);

窗口在显示器位置的设置
void gtk_window_set_position( GtkWindow *window, GtkWindowPosition position);
position常用有4种情况:

GTK_WIN_POS_NONE: 不固定
GTK_WIN_POS_CENTER: 居中
GTK_WIN_POS_MOUSE: 出现在鼠标位置 GTK_WIN_POS_CENTER_ALWAYS: 窗口总是居中

带按钮的窗口

创建一个带内容的按钮
GtkWidget *gtk_button_new_with_label(const gchar *label );

获得按钮上面的文本内容
const gchar *gtk_button_get_label(GtkButton *button );

把控件添加到窗口容器里
void gtk_container_add(GtkContainercontainer,GtkWidgetwidget);
container:容纳控件的容器;widget:要添加的控件

需要注意的是在云服务器中,按钮不能用中文

5.信号与回调函数机制
GTK+采用了信号与回调函数来处理窗口外部传来的事件、消息或信号。当信号发生时,程序自动调用为信号连接的回调函数。
窗口关闭时触发的常用信号:destroy, delete-event
操作按钮触发的常用信号:clicked, pressed,released

信号与回调函数的连接
gulong g_signal_connect( gpointer instance, const gchar *detailed_signal, GCallback c_handler, gpointer data );

instance: 信号的发出者
detailed_signal: 要连接信号的名称
c_handler: 回调函数的名称,需要用G_CALLBACK()进行转换
data: 传递给回调函数的参数

回调函数的定义
信号连接函数的写法:
g_signal_connect(button, "pressed",G_CALLBACK(callback), NULL);
回调函数的定义(参考“参考文档”)
void callback( GtkButton *button, gpointer user_data );
button: 信号的发出者
user_data:传给回调函数的数据

#include <gtk/gtk.h>//包含头文件
#include <stdio.h>
void dayin(GtkButton* button,gpointer user_data)
{
	printf("i love you\n");
	printf("%s\n",gtk_button_get_label(button));
}

int main(int argc, char  *argv[])//去掉const
{
	gtk_init(&argc,&argv);
	//gtk环境初始化
	GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	//创建一个新窗口(顶置有边框)
	gtk_window_set_title(GTK_WINDOW(window),"阿镜小可爱");
	//设置名称
	gtk_widget_set_size_request(window,300,100);
	//最小窗口大小
	gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
	//窗口伸缩设置
	gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
	//窗口位置
	GtkWidget *button1 = gtk_button_new_with_label("press");
	//创建一个按钮
	gtk_container_add(GTK_CONTAINER(window),button1);
	//把button1放入窗口
	g_signal_connect(button1,"pressed",G_CALLBACK(dayin),NULL);
	g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);
	//信号连接
	gtk_widget_show_all(window);
	gtk_widget_show(window);
	//显示窗口
	gtk_main();
	//主事件循环(死循环:无限的刷新页面)
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值