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