如何开发跨平台GUI程序
作者:沈仁
本文主要介绍如何使用gtk和dev-c++ 来开发跨平台GUI程序。针对大多读者没有丰富的C/C++ 经验,作者使用教程式的指导,望对读者入门C/C++的GUI开发能有所帮助。
众所周知MFC已经成为Win32的核心开发库,而VC++作为开发平台已经从16位时代至今任独领风骚。Delphi,VB等语言虽然对于开发应用程序非常方便但是应用面相对有限。而.NET, Java平台比较侧重新功能,这是以牺牲程序的性能和减少低级语言功能作为代价的。C++语言仍然在各领域中发挥重要作用。使用微软的VC++对Win32来说是一个理想的IDE。目前Linux发展飞快,在桌面领域各种开发工具层出不穷。比较常见的C/C++库就是gtk。作为刚刚步入C++编程的人员来说作为学习平台gtk是一个很好的选择。
大多Linux发行版中已经包含了gtk,甚至glade。用户所要做的仅仅是用vi来编辑一个c文件:
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
使用gcc编译就可以了:
gcc base.c -o base ‘pkg-config --cflags --libs gtk+-2.0’
当然Windows用户不能直接使用VC++来编译。感谢SourceForge的Glade社区他们制作了LGPL许可的Glade (一个RAD工具),并包括了gtk2.0 for win32。在Windows上运行我们还需要更多Linux上的环境。同样是SourceForge的Dev-C++就能满足我们的需要。它包括了MinGW和一个IDE。
下载完以后我们应该看到硬盘上多了2个文件:
gtk-win32-devel-x.x.x-rc1.exe
devcpp-x.x.x.x_setup.exe
这些都是LGPL的软件,意味着你可以利用这些免费软件来商业开发。现在先安装devcpp,接着再是gtk,这样gtk的安装程序就能自动识别出devcpp,并且能够自动配置devcpp。
开发环境建立好了,现在可以进行最后配置。同样是上文的c文件,我们用Dev-C++建立一个空项目,建立c文件,粘贴代码,编译。如果没有通过说明编译器参数没有选对,请加上下面的参数,可以通过Projects:Options:Parameters打开:
Compiler:
-mms-bitfields -mwindows -DHAVE_CONFIG_H -I"$(GTK_BASEPATH)/include/gtk-2.0" -I"$(GTK_BASEPATH)/lib/gtk-2.0/include" -I"$(GTK_BASEPATH)/include/atk-1.0" -I"$(GTK_BASEPATH)/include/pango-1.0" -I"$(GTK_BASEPATH)/include/glib-2.0" -I"$(GTK_BASEPATH)/lib/glib-2.0/include" -I"$(GTK_BASEPATH)/include" -DPACKAGE_PREFIX=\"\" -DPACKAGE_DATA_DIR=\"\" -DPACKAGE_LOCALE_DIR=\"\"
C++ Compiler:
-mms-bitfields -mwindows -DHAVE_CONFIG_H -I"$(GTK_BASEPATH)/include/gtk-2.0" -I"$(GTK_BASEPATH)/lib/gtk-2.0/include" -I"$(GTK_BASEPATH)/include/atk-1.0" -I"$(GTK_BASEPATH)/include/pango-1.0" -I"$(GTK_BASEPATH)/include/glib-2.0" -I"$(GTK_BASEPATH)/lib/glib-2.0/include" -I"$(GTK_BASEPATH)/include" -DPACKAGE_PREFIX=\"\" -DPACKAGE_DATA_DIR=\"\" -DPACKAGE_LOCALE_DIR=\"\"
Linker:
-L"$(GTK_BASEPATH)/lib" -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
然后按F9编译+运行,应该出现一个200x200的对话框,是不是和Linux下的结果一致呢?好了,现在你已经学会了跨平台GUI的开发基础!
作者注:如果大家希望的话我可以开辟一个系列。像Glade,STL都可以作为一个章节。不正确的地方请大家指教。转载请说明作者和出处。