GTK在windows VS2017(13以上版本)环境搭建
[GTK](https://baike.baidu.com/item/gtk/3138659?fr=aladdin)主要是Linux下的图形工具包,但在windows与Mac os下面也有相应的版本。 本篇博文废话不多直入正题,下面开始我们的教程:
- 首先,你要有Git,会基本操作就可以,不会Git操作也没关系,跟着博文走就行.
- Visual Studio2017 的准备操作:
这三个打上对勾, - 下面就开始安装GTK
- 首先来到GTK官网,下载windows所需的版本,
(XL工具),然后(下面是可耻翻译的官网的一大段话,但是你也要按我下面的步骤来):
从vcpkg软件包中使用GTK
警告:GTK团队不维护vcpkg打包,它使用的构建系统不同于GTK所使用的构建系统。如果使用vcpkg构建GTK或其依赖项时发生故障,请确保在vcpkg问题跟踪器(而不是GTK 问题)中打开一个问题。
安装
Microsoft vcpkg项目将GTK库以及所有先决条件和许多语言绑定(例如C ++绑定gtkmm)打包在一起,以便与Visual Studio一起使用。这提供了一种非常简单的方法来设置开发环境以创建GTK应用程序。如果您希望通过命令行而不是使用Visual Studio进行更类似于UNIX的体验,则可能需要考虑从MSYS2安装GTK。
为了使用vcpkg软件包,首先需要克隆vcpkg存储库, 然后可以使用以下命令安装GTK软件包 :冒号“:”后面的部分指定目标。完成此步骤后,在Visual Studio中创建的任何项目现在都将自动看到GTK库。
依次在Git上敲击以下命令:
- git clone https://github.com/Microsoft/vcpkg
- cd vcpkg
- ./bootstrap-vcpkg.bat
- ./vcpkg install gtk:x64-windows
构建和分发您的应用程序
如上所述安装GTK后,编译GTK应用程序应该没有问题。为了成功运行它,您还将需要一个GTK主题。GTK中对Windows主题有一些旧的内置支持,但这使您的应用看起来像Windows 7应用。最好使用Windows 10主题,例如Windows 10 Transformation Pack。
gtk-3.20将该存储库的文件夹复制到share/themes/Windows10/gtk-3.0/安装文件夹中的文件夹中。您还需要复制Adwaita主题中的图标,可以从Linux框中获取图标,它们存储在其中 /usr/share/icons/Adwaita/;将此整个文件夹复制到 share/icons安装文件夹中的文件夹中。彩色图标的同上。为了使GTK能够使用此主题,请将文件settings.ini放在etc/gtk-3.0 安装文件夹中。它应该包含 并且最重要的是,找到其中的文件并将其复制到 。
[Settings]
gtk-theme-name=Windows10
gtk-font-name=Segoe UI 9
gschemas.compiled/usr/share/glib-2.0/schemas/share/glib-2.0/schemas
然后,您可以压缩安装文件夹,或使用安装程序生成器为您执行此操作,然后分发结果。
- 最后,在VS上复制一下这段代码,应该可以成功运行,不能就在下面留言
#include <gtk/gtk.h> #pragma warning (disable:4996) /* 我们的回调。 * 传到这个函数的数据被打印到标准输出 */ void callback(GtkWidget *widget, gpointer data) { g_print("%s", (char *)data); } /* 这个回调退出程序 */ gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { gtk_main_quit(); return FALSE; } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *button; GtkWidget *table; gtk_init(&argc, &argv); /* 创建一个新窗口 */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* 设置窗口标题 */ gtk_window_set_title(GTK_WINDOW(window), "Shimmer's Keyboard"); /* 为 delete_event 设置一个立即退出 GTK 的处理函数。 */ g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL); /* 设置窗口的边框宽度。 */ gtk_container_set_border_width(GTK_CONTAINER(window), 20); /* 创建一个 2x2 的表 */ table = gtk_table_new(4, 20, TRUE); /* 将表放进主窗口 */ gtk_container_add(GTK_CONTAINER(window), table); /* 创建第一个按钮 */ button = gtk_button_new_with_label("Q"); /* 当这个按钮被点击时,我们调用 "callback" 函数,并将一个指向"button 1"的指针作为它的参数 */ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "q"); /* 将 button 1 插入表的左上象限(quadrant) */ gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 2, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("W"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "w"); gtk_table_attach_defaults(GTK_TABLE(table), button, 2, 4, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("E"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "e"); gtk_table_attach_defaults(GTK_TABLE(table), button, 4, 6, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("R"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "r"); gtk_table_attach_defaults(GTK_TABLE(table), button, 6, 8, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("T"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "t"); gtk_table_attach_defaults(GTK_TABLE(table), button, 8, 10, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("Y"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "y"); gtk_table_attach_defaults(GTK_TABLE(table), button, 10, 12, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("U"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "u"); gtk_table_attach_defaults(GTK_TABLE(table), button, 12, 14, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("I"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "i"); gtk_table_attach_defaults(GTK_TABLE(table), button, 14, 16, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("O"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "o"); gtk_table_attach_defaults(GTK_TABLE(table), button, 16, 18, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("P"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "p"); gtk_table_attach_defaults(GTK_TABLE(table), button, 18, 20, 0, 1); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("A"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "a"); gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 3, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("S"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "s"); gtk_table_attach_defaults(GTK_TABLE(table), button, 3, 5, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("D"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "d"); gtk_table_attach_defaults(GTK_TABLE(table), button, 5, 7, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("F"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "f"); gtk_table_attach_defaults(GTK_TABLE(table), button, 7, 9, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("G"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "g"); gtk_table_attach_defaults(GTK_TABLE(table), button, 9, 11, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("H"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "h"); gtk_table_attach_defaults(GTK_TABLE(table), button, 11, 13, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("J"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "j"); gtk_table_attach_defaults(GTK_TABLE(table), button, 13, 15, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("K"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "k"); gtk_table_attach_defaults(GTK_TABLE(table), button, 15, 17, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("L"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "l"); gtk_table_attach_defaults(GTK_TABLE(table), button, 17, 19, 1, 2); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("'"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "'"); gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 2, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("Z"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "z"); gtk_table_attach_defaults(GTK_TABLE(table), button, 2, 4, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("X"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "x"); gtk_table_attach_defaults(GTK_TABLE(table), button, 4, 6, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("C"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "c"); gtk_table_attach_defaults(GTK_TABLE(table), button, 6, 8, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("V"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "v"); gtk_table_attach_defaults(GTK_TABLE(table), button, 8, 10, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("B"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "b"); gtk_table_attach_defaults(GTK_TABLE(table), button, 10, 12, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("N"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "n"); gtk_table_attach_defaults(GTK_TABLE(table), button, 12, 14, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("M"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "m"); gtk_table_attach_defaults(GTK_TABLE(table), button, 14, 16, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label(","); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) ","); gtk_table_attach_defaults(GTK_TABLE(table), button, 16, 18, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("."); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "."); gtk_table_attach_defaults(GTK_TABLE(table), button, 18, 20, 2, 3); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label("Enter"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) "\n"); gtk_table_attach_defaults(GTK_TABLE(table), button, 2, 6, 3, 4); gtk_widget_show(button); /*********************/ button = gtk_button_new_with_label(" "); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), (gpointer) " "); gtk_table_attach_defaults(GTK_TABLE(table), button, 6, 16, 3, 4); gtk_widget_show(button); /* 创建"Quit"按钮 */ button = gtk_button_new_with_label("Quit"); /* 当这个按钮被点击时,我们调用 "delete_event" 函数接着程序就退出了 */ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(delete_event), NULL); /* 将退出按钮插入表的下面两个象限 */ gtk_table_attach_defaults(GTK_TABLE(table), button, 16, 19, 3, 4); gtk_widget_show(button); gtk_widget_show(table); gtk_widget_show(window); gtk_main(); return 0; }//The code is copied by others
- 点赞
- 收藏
- 分享
- 文章举报
- Cocos2D-x 2.0以上版本跨Android开发环境的搭建---------------------cocos2d-x 3.0正式版本(7.2)
- springboot2.0以上搭建接口版本控制环境。
- Mac系统下搭建Cocos2d-x开发环境及2.20以上版本如何创建HelloWorld
- 【深度学习】笔记13 win10+cuda7.5+caffe+vs2013环境搭建(GPU版本)
- Android 开发环境搭建---Android 编译需要的sun-java5-jdk在ubuntu10.04以上版本的安装问题
- vue.js 2.0 版本--idea搭建vue环境
- Django2.0从搭建环境到部署到服务器简单例子及版本问题
- Ubuntu下Intellij IDEA 13+Tomcat8开发环境搭建
- plsql在安装有10g数据库及以上版本的环境上运行时database项为空的问题解决
- 用 Apache 和 Subversion 搭建安全的版本控制环境
- hadoop2.6.0版本集群环境搭建
- 源码安装搭建LAMP环境---实现更新版本的服务
- 13、单机运行环境搭建之 --Centos6.4下iptables保护主机安全
- Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。
- Cygwin64上搭建python3.0以上的环境
- 转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。
- Hadoop安装、Hadoop环境搭建(Apache)版本
- ubuntu 12.04(64位)下搭建android4.0以上开发环境