您的位置:首页 > 其它

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

2020-02-02 11:30 891 查看
[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
  • 点赞
  • 收藏
  • 分享
  • 文章举报
Shimmer626 发布了2 篇原创文章 · 获赞 2 · 访问量 114 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: