【C语言】Windows上用GTK写GUI程序

要使用GTK开发一个Windows图形用户界面程序,需要首先设置GTK开发环境。这通常包括安装GTK库和它的依赖,以及配置编译器和工具链。可以选择使用纯C语言和GTK库或者使用支持GTK绑定的其他语言,如Python、C++或Rust。

1. 安装GTK开发库

在Windows上,这可以通过MSYS2这样的环境来完成。通过MSYS2安装GTK的步骤通常包括安装基础系统、更新包管理器、然后使用包管理器安装GTK。

可参考【C++】Windows编译FileZilla Client-CSDN博客

2. 创建一个新的C文件(例如gtk-test.c

写下以下代码:

#include <gtk/gtk.h>

static void print_hello(GtkWidget *widget, gpointer data) {
 g_print("Hello World\n");
}

static void activate(GtkApplication *app, gpointer user_data) {
 GtkWidget *window;
 GtkWidget *button;

 // 创建一个窗口
 window = gtk_application_window_new(app);
 gtk_window_set_title(GTK_WINDOW(window), "Window");
 gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

 // 创建一个按钮,绑定点击事件
 button = gtk_button_new_with_label("Hello World");
 g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL);
 gtk_window_set_child(GTK_WINDOW(window), button);

 // 显示窗口和按钮
 gtk_window_present(GTK_WINDOW(window));
}

int main(int argc, char **argv) {
 GtkApplication *app;
 int status;

 // 创建一个GtkApplication实例
 app = gtk_application_new("org.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;
}

3. 编译该程序

gcc `pkg-config --cflags gtk4` -o my-gtk-app gtk-test.c `pkg-config --libs gtk4`

`pkg-config` 命令用于自动检索GTK库的编译和链接标志。

4. 运行编译好的程序

 ./my-gtk-app.exe

当你执行这个程序时,应该会看到一个有“Window”标题的新窗口。请记住这只是一个非常基础的示例。实际上,开发一个丰满的Windows GUI程序还需要处理很多其他的事情,比如事件处理、布局管理、用户输入和更多。另外,如果你不想手动处理上述所有步骤,你可以使用一个集成的开发环境(IDE),比如 Microsoft Visual Studio 或者 GNOME Builder,这些IDE通常对GTK开发有更好的支持,并提供图形化辅助工具来简化开发过程。

5. 确保程序是作为“窗口应用程序(Windows Application)”编译

在Windows上使用GTK开发的应用程序通常会通过某种形式的兼容层进行编译,比如 MSYS2、Cygwin 或是直接在 Windows 上的 MinGW。如果在运行GTK程序时出现一个命令行窗口(通常是一个黑色的窗口),这可能是因为程序是作为控制台应用程序编译的。
要避免这种情况,需要确保你的程序是作为“窗口应用程序(Windows Application)”编译的,而不是作为“控制台应用程序(Console Application)”。在使用GCC编译器时,可以通过指定 -mwindows 链接器选项来实现这一点。这个选项告诉链接器正在创建一个窗口程序,它不应该分配一个控制台窗口。
以下是编译GTK Windows程序时的GCC命令示例:

gcc `pkg-config --cflags gtk4` -o my-gtk-app gtk-test.c `pkg-config --libs gtk4` -mwindows

在上面的命令中:
- pkg-config --cflags gtk4 获取GTK 4库相关的编译标志。
- pkg-config --libs gtk4 获取GTK 4库相关的链接标志。
- -mwindows 是防止控制台窗口出现的关键选项。
确保在编译时包含 -mwindows 选项,这样编译出来的程序在执行时就不会出现额外的命令行窗口。
如果你是使用其他构建系统(如CMake、Meson等)或集成开发环境(IDE),请确保在构建配置中也指定了相应的选项以生成窗口应用程序。