【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

写下以下代码:

cpp 复制代码
#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. 编译该程序

bash 复制代码
gcc `pkg-config --cflags gtk4` -o my-gtk-app gtk-test.c `pkg-config --libs gtk4`

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

4. 运行编译好的程序

bash 复制代码
 ./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命令示例:

bash 复制代码
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),请确保在构建配置中也指定了相应的选项以生成窗口应用程序。

相关推荐
小莞尔11 小时前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔11 小时前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing1023292911 小时前
Day03_刷题niuke20250915
c语言
路由侠内网穿透13 小时前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
第七序章14 小时前
【C++STL】list的详细用法和底层实现
c语言·c++·自然语言处理·list
l1t16 小时前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb
l1t18 小时前
利用美团龙猫用libxml2编写XML转CSV文件C程序
xml·c语言·libxml2·解析器
研华嵌入式20 小时前
如何在高通跃龙QCS6490 Arm架构上使用Windows 11 IoT企业版?
arm开发·windows·嵌入式硬件
Gu_shiwww1 天前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
你怎么知道我是队长1 天前
C语言---循环结构
c语言·开发语言·算法