GTK移植到Windows VS2017

    [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上复制一下这段代码,应该可以成功运行,不能就在下面留言
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#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


:D 一言句子获取中...