An Introduction to C & GUI Programming -----Simon Long 学习笔记 2

书直接讲到button了,我觉得不行,先不管其它功能,窗口肯定有标题和大小,这都不讲说不过去。

窗口设置标题

#include <gtk/gtk.h>
int main (int argc, char *argv[])
{
    gtk_init (&argc, &argv);
    GtkWidget *win1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    GtkWidget *win2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    /* 初学者表示很疑惑 gtk_window_new生成一个窗口但是返回值它是GtkWidget类型的
       然后gtk_window_set_title 需要GtkWindow类型参数*/
    gtk_window_set_title (GTK_WINDOW(win1), "QT is better than GTK");
    gtk_window_set_title (GTK_WINDOW(win2), "GTK is better than QT");
    gtk_widget_show (win1);
    gtk_widget_show (win2);
    gtk_main ();
    return 0;
}

编译   gcc `pkg-config --cflags gtk+-3.0` test.c -o hello `pkg-config --libs gtk+-3.0`

结果

 标题都被挡住了,必须要设置下窗口大小

#include <gtk/gtk.h>

void
gtk_window_set_default_size (GtkWindow *window,
                             gint width,
                             gint height);

int main (int argc, char *argv[])
{
    gtk_init (&argc, &argv);
    GtkWidget *win1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    GtkWidget *win2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW(win1), "QT is better than GTK");
    gtk_window_set_title (GTK_WINDOW(win2), "GTK is better than QT");
    gtk_window_set_default_size(GTK_WINDOW(win1), 1920, 1080);
    gtk_window_set_default_size(GTK_WINDOW(win2), 240, 120);
    gtk_widget_show (win1);
    gtk_widget_show (win2);
    gtk_main ();
    return 0;
}

结果

 电脑分辨率是1920x1080的,再写大了没什么用,还是占用一个屏幕

关闭右上角最大化和“x”按钮选项

#include <gtk/gtk.h>

void end_program(GtkWidget *wid, gpointer ptr)
{
    gtk_main_quit();
}

int main (int argc, char *argv[])
{
    gtk_init(&argc, &argv);
    GtkWidget *login = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW(login), "欢迎!"); 
    gtk_window_set_default_size(GTK_WINDOW(login), 720, 360);
    gtk_window_set_position(GTK_WINDOW(login),GTK_WIN_POS_CENTER); // 居中显示
    gtk_window_set_resizable(GTK_WINDOW(login), FALSE);      // 关闭最大化按钮(不能调整大小了,等于关闭最大化按钮了)
    gtk_window_set_deletable(GTK_WINDOW(login), FALSE);      // 关闭“x”按钮
    g_signal_connect(login, "delete_event", G_CALLBACK(end_program), NULL);  // 窗口点击X会触发delete_event信号
    gtk_widget_show(login);
    gtk_main();
    return 0;
}

API 参考

https://developer.gnome.org/gtk3/stable/GtkWindow.html

原文地址:https://www.cnblogs.com/goodluck14/p/13234898.html