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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/314530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 常用知识和面试题

1. 什么是JVM内存结构&#xff1f; jvm将虚拟机分为5大区域&#xff0c;程序计数器、虚拟机栈、本地方法栈、java堆、方法区&#xff1b; 程序计数器&#xff1a;线程私有的&#xff0c;是一块很小的内存空间&#xff0c;作为当前线程的行号指示器&#xff0c;用于记录当前虚拟…

阿里云服务器开放端口Oracle 1521方法教程

阿里云服务器ECS端口是在安全组设置的&#xff0c;Oracle数据库1521端口号开放是在安全组中添加规则来实现的&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器开放Oracle 1521端口方法教程&#xff1a; 阿里云服务器开放Oracle 1521端口 在阿里云服务器ECS…

2023年“中银杯”安徽省网络安全B模块(部分解析)

前言 以下是2023年中银杯安徽省网络安全B模块题目&#xff0c;镜像可以私聊我 B模块安全事件响应/网络安全数据取证/应用安全&#xff08;400 分&#xff09; B-1&#xff1a;CMS网站渗透测试 任务环境说明&#xff1a; √服务器场景&#xff1a;Server2206&#xff08;关…

echarts手动触发气泡的显示和隐藏

点击echarts图表后将点击的那个进行突出显示 <template><div id"demo"> </div><el-button type"primary" click"set">设置</el-button><el-button type"primary" click"cancel">取消&…

阶段十-分布式-nginx服务器

一、Nginx简介 Nginx 是高性能的 HTTP 和反向代理的服务器&#xff0c;处理高并发能力是十分强大的&#xff0c;能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。tomcat并发数量理论值是500&#xff0c;实际也就300左右。 1.2 正向代理 正向代理代理的是客户…

【zookeeper选举源码分析】

文章目录 为什么要看源码&#xff1a; 1、提升技术功底&#xff1a;学习源码里的优秀设计思想&#xff0c;比如一些疑难问题的解决思路&#xff0c;还有一些优秀的设计模式&#xff0c;整体提升自己的技术功底 2、深度掌握技术框架&#xff1a;源码看多了&#xff0c;对于一个新…

【Matlab】LSTM长短期记忆神经网络时序预测算法

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88688439 一&#xff0c;概述 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种常用的循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;结构&#xff0c;由于其对于…

决策树模型

决策书就是一种树状的模型&#xff0c;可以用来做分类和回归。这种分类方式很好理解&#xff0c;相当于分岔路一样&#xff0c;满足某一个条件就走对应的道路&#xff0c;然后抵达不同的终点。决策树有很多类型&#xff0c;基本的有ID3决策树&#xff0c;C4.5决策树&#xff0c…

自动驾驶论文

文章目录 一、Convolutional Social Pooling for Vehicle Trajectory Prediction二、QCNet&#xff1a;Query-Centric Trajectory Prediction三、VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation 一、Convolutional Social Pooling for Vehicl…

Mysql基础总结

一、MySql基础 MySQL常见面试题 一、索引相关 &#xff08;1&#xff09;什么是索引? 索引是一种数据结构&#xff0c;可以帮助我们快速的进行数据的查找。 &#xff08;2&#xff09;索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关&#xff0c;…

vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果

一、实现效果 使用echarts实现省市地图绘制根据数据在地图显示柱状图根据数据显示数据&#xff0c;涟漪效果 二、实现方法 1、安装echarts插件 npm install echarts --save2、获取省市json数据 https://datav.aliyun.com/portal/school/atlas/area_selector 通过 阿里旗下…

Redis Cluster集群模式学习

Redis Cluster集群模式 Redis哨兵模式&#xff1a;https://blog.csdn.net/liwenyang1992/article/details/133956200 Redis Cluster集群模式示意图&#xff1a; Cluster模式是Redis3.0开始推出采用无中心结构&#xff0c;每个节点保存数据和整个集群状态&#xff0c;每个节点都…