GTK在windows VS2017(13以上版本)环境搭建

	[GTK](https://baike.baidu.com/item/gtk/3138659?fr=aladdin)主要是Linux下的图形工具包,但在windows与Mac os下面也有相应的版本。
本篇博文废话不多直入正题,下面开始我们的教程:[本文具有时效性]
  1. 首先,你要有Git,会基本操作就可以,不会Git操作也没关系,跟着博文走就行.
  2. Visual Studio2017 的准备操作:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这三个打上对勾,
  3. 下面就开始安装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上敲击以下命令:

  1. git clone https://github.com/Microsoft/vcpkg
  2. cd vcpkg
  3. ./bootstrap-vcpkg.bat
  4. ./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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值