以下为网上摘的,自己把它整理在了一起
WINDOWS下实现GTK+/GTKMM的编程
(一)、下载软件包
1、下载dev C++开发软件(我的版本是4.9.9.2)
2、下载GTK+
3、下载GTKMM(对于C++的朋友)
即是下面的三个文件
(二)、安装(全部默认安装)
1、先装dev c++
2、再装GTK+
3、再装GTKMM
(三)、环境变量设置(右键我的电脑,属性,高级)
1、在系统变量添加
变量:PKG_CONFIG_PATH
值:C:\GTK\lib\pkgconfig
保存退出。
2、打开命令行(开始,运行,CMD)
输入:pkg-config --version回车
看是否版本信息输出,如果有,说明系统变量设置正确,如果找不到该命令,就需要重启电脑。一般XP需要重启,WIN7不需要。
3、生成编译器、链接器信息(这部分只针对C++的朋友说的,C的配置也类似,不会的就留言给我)
命令行下依次输入以下命令,即可在C:\下生成cflags.txt、libs.txt
一般输入第一条命令时会出现下面的问题:(原因是依赖文件pixman-1.pc没找到)
解决办法:
修改文件:C:\GTK\lib\pkgconfig\cairo.pc,去掉pixman-1>...的内容,保存后再试,即可
(四)、配置dev c++
打开 dev c++
新建C++工程,如下图
右键test,打开project options
选择parameters,然后打开之前产生的cflags.txt,复制内容至C++ complier
打开libs.txt,复制内容至Linker.最终结果如下图:
此时所有配置完成!
测试代码,自行完成。
原文链接一:
GTK 简介
GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL许可证,所以可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业软件,而不用花费任何费用来购买许可证和使用权。当前,GTK 已经被成功地应用到 了大量的自由软件及商业软件中,已经取得了很大的成功。
GTK是跨平台的,它能够运行于Linux/Unix/Windows/MacOS及嵌入式系统
下面就来介绍一下在Windows一搭建GTK开发环境。
首先需要先安装C/C++开发环境,GTK支持Cygwin、MSYS、Dec-Cpp、MSVC这几种。这里偶用的是Dev-Cpp。在前一篇文章《在Windows下安装gcc》(http://www.xefan.cn/archives/83446.html)介绍了Dev-Cpp的安装。
下载、安装GTK
下载地址:http://gladewin32.sourceforge.net/
由于我们是用于开发,所以就选择下载Gtk+ 2.12.9 Development Environment Revision 2这个。下载完后安装gtk-dev-2.12.9-win32-2.exe,安装过程全部按照默然的就可以了,留意一下的是选择IDE的时候确定一下是Dev-Cpp就可以了。安装完毕后系统环境变量和Dev-Cpp的目录设置应该都已经设置好了。
1、查看系统环境变量:右键单击“我的电脑”–>“属性”–>“高级”–>“环境变量”–>“系统变量”,可以看到Path增加了“%GTK_BASEPATH%bin”。
2、查看Dev-Cpp的目录设置:“工具”–>“编译器选项”–>“目录”,选择“库”可以看到“C:GTKbin”;选择“C包含文件”可以看到“C:GTKINCLUDE”……
接下来我们进行测试一下,打开 Dev-C++,建立一个新的工程,添加一个新文件:
#include这个时候还不能编译,需要修改工程属性,在”工程->工程属性->参数” 或 “工具->编译选项”中的链接器框里面填入:
-lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv在编译选项里面填入:
-mms-bitfields就可以编译通过了。
在运行以后,你会发现出现一个空白窗口,标题为 Hello World。
原文链接
二:
在[url]http://www.gtk.org/download.html[/url]可以找到Windows(32-bit)和64-bit的版本下载,按照自己的系统是32位还是64位选择相应的版本,页面中的GTK+ individual packages是GTK+运行所必须的库,Third Party Dependencies是第三方依赖库。这样我们就能够根据需要下载相应的库文件,能够使GTK+库最小化。如果想要简单的话,页面上也提供了一个bundle包,这是将所有库打包在一起的,可以下载这个使用。注意,bundle包并没有单列出来,而是在页面正文中给出的链接,可能需要小心找找。
这里我们下载bundle包,解压缩之后,可以将里面的bin文件夹添加到环境变量path里面,以便我们编译出的exe文件运行时可以找到那些dll。否则的话需要将这些dll复制到和exe同一目录下。还可以将bin里面的这些dll全部复制到C:\WINDOWS\system32文件夹下,因为即使将这些添加到系统环境变量,在IDE里面运行也是找不到dll的,复制到system32文件夹下就可以了。
下面使用VC6来配置编译环境。
首先在VC6的Tools-Options下面的Directories选择Include files,添加GTK+目录下的include文件夹以及里面的所有一级子目录,然后添加lib文件夹下的子目录中的include文件夹,这样的话一共是添加10个目录:
然后在Library files里面添加GTK+目录下的lib文件夹:
这样之后VC6就已经配置好了,VS2008之类的也类似配置。下面新建一个控制台工程(VC6)或者是空工程(VS2008),打开工程的settings,在link选项卡下清空里面原有的Object/library modules,然后添加glib-2.0.lib gtk-win32-2.0.lib gdk-win32-2.0.lib gobject-2.0.lib gdk_pixbuf-2.0.lib gthread-2.0.lib gmodule-2.0.lib pango-1.0.lib intl.lib 几个,确定即可。这里使用的是VC6,VS2008里面也有类似的设置。
这样设置之后可以新建一个main.c文件,然后输入:
#include
int main(int argc, char** argv)
{
GtkWidget* window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(GTK_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(window);
gtk_main();
return 0;
}
编译、链接、运行,有窗口出现,说明环境配置成功:
原文链接
三:在windows 7下为VS安装和配置Gtkmm
为了能在VS中使用Gtk+库,今天忙乎了一下午,走了弯路,把Gtk+库加到VS2010我实在是弄不出来。最后还是选择VS2008了,结果成功了。现在分享下我是怎么给VS2008加入Gtk+库的。为什么想在VS中使用Gtk+就不多说了,个人爱好问题。
那为什么选择Gtkmm而不选择Gtk+呢?这个应该都知道,Gtkmm是封装好了类,支持C++,同样也支持C。
步骤:
1.先下载Gtkmm安装包,下载地址。安装好Gtkmm(怎么安装不说了,一键式的安装);
2.打开VS2008,新建一个控制台项目,我建的项目是gtk_test,保存在文件夹:E:\vc++2008\gtk_test
如下图:
3.项目建好后,打开属性管理器,找不到属性管理器在哪?打开路径如下图:
4.下面进入安装Gtkmm的文件夹,我安装在C盘:C:\gtkmm\MSVC ,进入MSVC文件夹,把下面两个文件复制到工程目录下:E:\vc++2008\gtk_test\gtk_test 下。
5.进入属性管理器,右键“Debug|Win32”,选择“添加现有属性表”
再选择刚才赋值的文件“gtkmm-vc90-d-2_4”。再右键“Release|Win32”,同上面一样,但选择文件“gtkmm-vc90-2_4”。
6.好了,基本完成了,现在来修改stdafx.h文件:
如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
gtk_test.cpp // stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include
#include
// TODO: 在此处引用程序需要的其他头文件
|
修改gtk_test.cpp文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// gtk_test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int main( int argc, char * argv[])
{
Gtk::Main kit(argc, argv);
Gtk::Window window;
Gtk::Main::run(window);
return EXIT_SUCCESS;
}
|
5.现在如果编译已经可以执行了,可能由于VS2008的一个bug,debug版本会跳出
执行编译release版,如下图,但是在Gtk窗口后面有个控制台窗口。
6.如何去掉后面的控制台呢?建议debug版保留这个控制台窗口。去掉控制台方法如下:
右键“gtk_test”,进入属性设置
进入属性设置窗口,修改:链接器->系统->子系统设为Windows(/SUBSYSTEM:WINDOWS)
再修改:链接器->高级->入口点设为mainCRTStartup
再次建议只修改release的配置。
7.运行结果如下:
关于gtkmm库的使用可以点此进入
如果你想学习Gtk+编程的话可以点此进入
其他的不多说了,我是初学者,在这只是分享下我知道的。接下来我就要开始学习Gkt了。
原文链接
四:
Gtk是图形界面库,Glade是Gtk界面的快速开发工具。可以使用Glade_with_Gtk+一体化安装包。地址:
http://ftp.gnome.org/pub/GNOME/binaries/win32/glade3/3.6/
本文将Gtk+安装在D盘根目录下。安装正确后在Windows的cmd窗口中分别运行pkg-config --cflags gtk+-2.0和pkg-config --libs gtk+-2.0后会有如下显示:
(1)>pkg-config --cflags gtk+-2.0-mms-bitfields -Id:/Gtk+/include/gtk-2.0 -Id:/Gtk+/lib/gtk-2.0/include -Id:/Gtk+/include/atk-1.0
-Id:/Gtk+/include/cairo -Id:/Gtk+/include/pango-1.0 -Id:/Gtk+/include/glib-2.0 -Id:/Gtk+/lib/glib-2.0/include
-Id:/Gtk+/include/libpng12
(2)>pkg-config --libs gtk+-2.0
-Ld:/Gtk+/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32
-lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl
三.创建工程
新建project new->c project,project type 选择Hello world ANSI c project,然后按如下步骤配置:
在project->properties->c/c++ build 下 setting :
(1)gcc complier->dirctories->include paths (-I) 中一项项添加命令的结果‘pkg-config --cflags gtk+-2.0’,即添加头文件路径
即一项项添加
d:/Gtk+/include/gtk-2.0
d:/Gtk+/lib/gtk-2.0/include
d:/Gtk+/include/atk-1.0
d:/Gtk+/include/cairo
d:/Gtk+/include/pango-1.0
d:/Gtk+/include/glib-2.0
d:/Gtk+/lib/glib-2.0/include
d:/Gtk+/include/libpng12
(2)对于linker:
GCC C linker -> libraries中添加命令'pkg-config --libs gtk+-2.0'执行结果
即一项项添加
gtk-win32-2.0
gdk-win32-2.0
atk-1.0
gio-2.0
gdk_pixbuf-2.0
pangowin32-1.0
gdi32
pangocairo-1.0
pango-1.0
cairo
gobject-2.0
gmodule-2.0
glib-2.0
intl
另外还需加入库的搜索路径d:/Gtk+/lib
三.GTK程序Hello_world示例
#include
/*定义回调函数hello,点击按钮时被系统自动调用*/
void hello(GtkWidget *widget,gpointer *data)
{
g_print("button clicked and data = %s\n",(char *)data);
}
/*定义回调函数destroy,关闭窗口时被系统自动调用*/
void destroy(GtkWidget *widget,gpointer *data)
{
gtk_main_quit();
}
int main(int argc,char **argv)
{
/*定义指向控件的指针*/
GtkWidget *window;
GtkWidget *button;
/*初始化图形显示环境*/
gtk_init(&argc,&argv);
/*创建窗口,并设置当关闭窗口时,要执行的回调函数*/
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(GTK_OBJECT(window),"destroy",
GTK_SIGNAL_FUNC(destroy),NULL);
/*设置窗口的属性*/
gtk_container_border_width(GTK_CONTAINER(window),20);
/*创建按钮,并设置当点击按钮时,要执行的回调函数*/
button = gtk_button_new_with_label("Hello World");
g_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(hello),"I am from button");
/*将按钮加入到窗口中*/
gtk_container_add(GTK_CONTAINER(window),button);
/*显示按钮和窗口*/
gtk_widget_show(button);
gtk_widget_show(window);
/*进入消息处理循环*/
gtk_main();
return 0;
}