hamid206
پنج شنبه 07 تیر 1386, 11:08 صبح
برای نصب gtk در ویندوز ابتدا کتابخانه gtk برای نصب در ویندوز را از ادرس زیر دانلود و نصب کنید
http://sourceforge.net/project/showfiles.php?group_id=98754&package_id=111411
حال برای پیکربندی ان برای استفاده در ویژوال استدیو 2005 کار های زیر را انجام دهید
یک تکست فایل ایجاد کنید و کدهای زیر را در ان بنویسید و به نام و پسوند زیر ذخیره کنید gtk+_debug.vsprops
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioPropertySheet
ProjectType="Visual C++"
Version="8.00"
Name="gtk+ debug"
>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(INCLUDE)"
RuntimeLibrary="3"
StructMemberAlignment="4"
AssemblerOutput="0"
DebugInformationFormat="4"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="art_lgpl_2.lib asprintf.lib atk-1.0.lib bz2.lib cairo.lib charset.lib croco-0.6.lib fontconfig.lib freetype.lib gdk_pixbuf-2.0.lib gdkglext-win32-1.0.lib gdk-win32-2.0.lib glade-2.0.lib glib-2.0.lib gmodule-2.0.lib gobject-2.0.lib gsf-1.lib gsf-win32-1.lib gthread-2.0.lib gtkglext-win32-1.0.lib gtk-win32-2.0.lib iconv.lib intl.lib jpeg.lib pango-1.0.lib pangocairo-1.0.lib pangoft2-1.0.lib pangowin32-1.0.lib png.lib popt.lib rsvg-2.lib tiff.lib xml2.lib z.lib"
AdditionalLibraryDirectories="$(LIB)"
GenerateDebugInformation="true"
AssemblyDebug="1"
GenerateMapFile="false"
SubSystem="1"
OptimizeForWindows98="1"
/>
</VisualStudioPropertySheet>
یک تکست فایل دیگر ایجاد کنید و کدهای زیر را در ان بنویسید و به نام و پسوند زیر ذخیره کنید
gtk+_release.vsprops
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioPropertySheet
ProjectType="Visual C++"
Version="8.00"
Name="gtk+ release"
>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
FavorSizeOrSpeed="1"
AdditionalIncludeDirectories="$(INCLUDE)"
RuntimeLibrary="2"
StructMemberAlignment="4"
AssemblerOutput="0"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="art_lgpl_2.lib asprintf.lib atk-1.0.lib bz2.lib cairo.lib charset.lib croco-0.6.lib fontconfig.lib freetype.lib gdk_pixbuf-2.0.lib gdkglext-win32-1.0.lib gdk-win32-2.0.lib glade-2.0.lib glib-2.0.lib gmodule-2.0.lib gobject-2.0.lib gsf-1.lib gsf-win32-1.lib gthread-2.0.lib gtkglext-win32-1.0.lib gtk-win32-2.0.lib iconv.lib intl.lib jpeg.lib pango-1.0.lib pangocairo-1.0.lib pangoft2-1.0.lib pangowin32-1.0.lib png.lib popt.lib rsvg-2.lib tiff.lib xml2.lib z.lib"
AdditionalLibraryDirectories="$(LIB)"
GenerateDebugInformation="false"
AssemblyDebug="0"
GenerateMapFile="false"
SubSystem="2"
OptimizeForWindows98="1"
/>
</VisualStudioPropertySheet>
حال در vc یک پروژه تحت کنسول ایجاد کنید و در مسیر زیر این دو فایلی که ساختید به پروژه اضافه کنید
View -> Other Windows -> Property Manager
تمام شد همین!!
حالا کدها زیر را همیشه قبل از ایجاد هر برنامه به پروژه خود اضافه کنید
/* Windows Specific Code */
#ifdef G_OS_WIN32
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
return main (__argc, __argv);
}
#endif
برای نمونه این هم یه برنامه:
#include <gtk/gtk.h>
static void hello( GtkWidget *widget,
gpointer data )
{
g_print ("Hello World\n", data);
}
static gboolean delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
g_print ("delete event occurred\n");
return FALSE;
}
static 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 (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (hello), NULL);
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main ();
return 0;
}
/* Windows Specific Code */
#ifdef G_OS_WIN32
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
return main (__argc, __argv);
}
#endif
از این به بعد شما می تونید یک برنامه بنویسید و در دو محیط ویندوز و لینوکس استفاده کنید فقط باید کد خودتون رو دوبار کامپایل کنید استفاده از gtk در ویندوز برای ایجاد پروژه های GUI تنها یک ضرر داره اون هم این هست که سرعتش نسبت به API های ویندوز کمتر هست
http://sourceforge.net/project/showfiles.php?group_id=98754&package_id=111411
حال برای پیکربندی ان برای استفاده در ویژوال استدیو 2005 کار های زیر را انجام دهید
یک تکست فایل ایجاد کنید و کدهای زیر را در ان بنویسید و به نام و پسوند زیر ذخیره کنید gtk+_debug.vsprops
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioPropertySheet
ProjectType="Visual C++"
Version="8.00"
Name="gtk+ debug"
>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(INCLUDE)"
RuntimeLibrary="3"
StructMemberAlignment="4"
AssemblerOutput="0"
DebugInformationFormat="4"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="art_lgpl_2.lib asprintf.lib atk-1.0.lib bz2.lib cairo.lib charset.lib croco-0.6.lib fontconfig.lib freetype.lib gdk_pixbuf-2.0.lib gdkglext-win32-1.0.lib gdk-win32-2.0.lib glade-2.0.lib glib-2.0.lib gmodule-2.0.lib gobject-2.0.lib gsf-1.lib gsf-win32-1.lib gthread-2.0.lib gtkglext-win32-1.0.lib gtk-win32-2.0.lib iconv.lib intl.lib jpeg.lib pango-1.0.lib pangocairo-1.0.lib pangoft2-1.0.lib pangowin32-1.0.lib png.lib popt.lib rsvg-2.lib tiff.lib xml2.lib z.lib"
AdditionalLibraryDirectories="$(LIB)"
GenerateDebugInformation="true"
AssemblyDebug="1"
GenerateMapFile="false"
SubSystem="1"
OptimizeForWindows98="1"
/>
</VisualStudioPropertySheet>
یک تکست فایل دیگر ایجاد کنید و کدهای زیر را در ان بنویسید و به نام و پسوند زیر ذخیره کنید
gtk+_release.vsprops
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioPropertySheet
ProjectType="Visual C++"
Version="8.00"
Name="gtk+ release"
>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
FavorSizeOrSpeed="1"
AdditionalIncludeDirectories="$(INCLUDE)"
RuntimeLibrary="2"
StructMemberAlignment="4"
AssemblerOutput="0"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="art_lgpl_2.lib asprintf.lib atk-1.0.lib bz2.lib cairo.lib charset.lib croco-0.6.lib fontconfig.lib freetype.lib gdk_pixbuf-2.0.lib gdkglext-win32-1.0.lib gdk-win32-2.0.lib glade-2.0.lib glib-2.0.lib gmodule-2.0.lib gobject-2.0.lib gsf-1.lib gsf-win32-1.lib gthread-2.0.lib gtkglext-win32-1.0.lib gtk-win32-2.0.lib iconv.lib intl.lib jpeg.lib pango-1.0.lib pangocairo-1.0.lib pangoft2-1.0.lib pangowin32-1.0.lib png.lib popt.lib rsvg-2.lib tiff.lib xml2.lib z.lib"
AdditionalLibraryDirectories="$(LIB)"
GenerateDebugInformation="false"
AssemblyDebug="0"
GenerateMapFile="false"
SubSystem="2"
OptimizeForWindows98="1"
/>
</VisualStudioPropertySheet>
حال در vc یک پروژه تحت کنسول ایجاد کنید و در مسیر زیر این دو فایلی که ساختید به پروژه اضافه کنید
View -> Other Windows -> Property Manager
تمام شد همین!!
حالا کدها زیر را همیشه قبل از ایجاد هر برنامه به پروژه خود اضافه کنید
/* Windows Specific Code */
#ifdef G_OS_WIN32
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
return main (__argc, __argv);
}
#endif
برای نمونه این هم یه برنامه:
#include <gtk/gtk.h>
static void hello( GtkWidget *widget,
gpointer data )
{
g_print ("Hello World\n", data);
}
static gboolean delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
g_print ("delete event occurred\n");
return FALSE;
}
static 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 (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (hello), NULL);
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main ();
return 0;
}
/* Windows Specific Code */
#ifdef G_OS_WIN32
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
return main (__argc, __argv);
}
#endif
از این به بعد شما می تونید یک برنامه بنویسید و در دو محیط ویندوز و لینوکس استفاده کنید فقط باید کد خودتون رو دوبار کامپایل کنید استفاده از gtk در ویندوز برای ایجاد پروژه های GUI تنها یک ضرر داره اون هم این هست که سرعتش نسبت به API های ویندوز کمتر هست