相信也你一样,学完了C语言,觉得它只能写出黑洞洞的命令行程序。那你大错特错,它也能轻易写出图形界面的程序。下面我们就来配置它的开发环境,然后写一个简单的窗口程序。
首先,我们在https://www.msys2.org/这个网站下载msys2-x86_64-20230318.exe,并且按步骤安装它。
安装完成后在菜单中打开MYSY2 MYSY,用 pacman -Suy命令更新一下软件,提示时直接回车就可以了。接着用 pacman -S mingw-w64-i686-gcc安装gcc,用pacman -Ss gtk4 查找一下gtk4的软件包,没错我们就是用gtk4来开发C语言图型界面程序,这是一个纯C语言的图形界面开发工具。为了兼容性我们安装mingw-w64-i686-gtk4 ,用命令pacman -S mingw-w64-i686-gtk4 按提示来安装。最后用 pacman -S mingw-w64-i686-pkg-config 安装pkg-config工具。在菜单中打开MSYS2 MINGW32,输入命令gcc -v并回车,你应该能看到gcc的版本信息,输入pkg-config --cflags --libs gtk4并回车,你应该能看到一大段的路径信息。至此,开发环境配置完成。让我们输入一段代码测试一下吧。
#include <gtk/gtk.h>
static void print_hello(GtkWidget *widget, gpointer data)
{
int *t;
t = (int *)data;
g_print("你好,世界!%d\n", *t);
(*t)++;
}
static void activate(GtkApplication *app, gpointer user_data)
{
GtkWidget *window;
GtkWidget *button;
int *times = malloc(sizeof(int));
*times = 1;
window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "窗口示例程序");
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
button = gtk_button_new_with_label("你好,世界");
g_signal_connect(button, "clicked", G_CALLBACK(print_hello), times);
gtk_window_set_child(GTK_WINDOW(window), button);
gtk_window_present(GTK_WINDOW(window));
}
int main(int argc, char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new("gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}
保存为hello.c,比如保存在D:\gtk4\ 中。然后我们在MSYS2 MINGW32中用命令cd /d/gtk4切换到d:\gtk4\目录中,执行命令 gcc `pkg-config --cflags gtk4` hello.c -o hello `pkg-config --libs gtk4`,就得到了hello.exe文件,执行./hello,就出现了一个窗口点击窗口中间,在命令行中会出现“你好,世界!1”,是不是很神奇?