2015-10-21 3 views
1

Мне нужно было создать отладочную версию GTK-стека для разбогатела. После создания его я создал PKG-конфигурации для GTK и ниже мой пример программы в Visual StudioGTK: Visual Studio Issue

#include<gtk/gtk.h> 
#include<stdio.h> 
#include<string.h> 

int main(int argv, char* argc) 
{ 
    GtkWidget *window, *label; 
    gtk_init(&argv, &argc); 
    window = gtk_window_new(GTK_WINDOW_TOP_LEVEL); 
    gtk_window_set_title(GTK_WINDOW(window), "Window"); 
    gtk_window_set_size_request(window, 300, 100); 
    label = gtk_label_new("Click Me"); 
    gtk_label_set_selectable(GTK_LABEL(label), TRUE); 
    gtk_container_add(GTK_CONTAINER(window), label); 
    g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(key_press_event), label); 
    gtk_window_show_all(window); 
    gtk_main(); 
} 

static gboolean key_press_event(GtkWidget* window, GdkEvent* event, gpointer label) 
{ 
    GtkWidget* newlabel; 
    newlabel = GTK_LABEL(label); 
    const gchar wtitle[100]; 
    strncpy(wtitle, gtk_window_get_title(GTK_WINDOW(window)), sizeof(wtitle)); 
    gtk_window_set_title(GTK_WINDOW(window),gtk_label_get_text(GTK_LABEL(newlabel))); 
    gtk_label_set_text(GTK_LABEL(newlabel), wtitle); 
    return false; 
} 

Ниже мой pkg-config --cflags gtk-3-vs12 --msvc-syntax, который я включил в Project Properties -> C/C++ -> Командная строка -> Дополнительные параметры:

/Ic:/gtk_compilation/vs12/win32/include /Ic:/gtk_compilation/vs12/win32/include/gtk /Ic:/gtk_compilation/vs12/win32/include/gdk /Ic:/gtk_compilation/vs12/win32/include/pango /Ic:/gtk_compilation/vs12/win32/include/atk /Ic:/gtk_compilation/vs12/win32/include/cairo /Ic:/gtk_compilation/vs12/win32/include/fontconfig /Ic:/gtk_compilation/vs12/win32/include/gdk-pixbuf /Ic:/gtk_compilation/vs12/win32/include/glib 

Ниже мое pkg-config --libs gtk-3-vs12 --msvc-syntax, которые я включил в Project Properties -> Linker -> Командная строка -> Дополнительные опции:

/libpath:c:/gtk_compilation/vs12/win32/lib gtk-3-vs12.lib gdk3-win32.lib gdi32.lib imm32.lib shell32.lib ole32.lib -Wl,-luuid pangocairo.lib pangowin32.lib pango-1-vs12.lib m.lib atk-1-vs12.lib cairo-gobject.lib cairo-vs10.lib gdk_pixbuf-2-vs12.lib gio-2-vs12.lib gobject-2-vs12.lib glib-2-vs12.lib intl.lib 

Тем не менее я получаю ошибки ниже:

Error 9 error C2065: 'false' : undeclared identifier c:\users\sajith\documents\visual studio 2013\projects\consoleapplication8\consoleapplication8\testapp.c 28 1 ConsoleApplication8 
Error 3 error C2065: 'GTK_WINDOW_TOP_LEVEL' : undeclared identifier c:\users\sajith\documents\visual studio 2013\projects\consoleapplication8\consoleapplication8\testapp.c 9 1 ConsoleApplication8 
Error 5 error C2065: 'key_press_event' : undeclared identifier c:\users\sajith\documents\visual studio 2013\projects\consoleapplication8\consoleapplication8\testapp.c 15 1 ConsoleApplication8 

Может кто-нибудь просветить меня сортировкой на это?

+0

Во-первых, имя константы не 'GTK_WINDOW_TOP_LEVEL', это' GTK_WINDOW_TOPLEVEL'. – andlabs

+0

Во-вторых, вам нужно объявить 'key_press_event()', прежде чем вы сможете обратиться к нему в 'main()'. У вас есть два варианта: либо переместить функцию непосредственно до 'main()', либо добавить строку 'static gboolean key_press_event (окно GtkWidget *, событие GdkEvent *, метку gpointer);' перед 'main()'. – andlabs

+0

В-третьих, вы хотите 'key_press_event()' возвращать 'FALSE', а не' false'. – andlabs

ответ

1

Во-первых, постоянное имя не GTK_WINDOW_TOP_LEVEL, это GTK_WINDOW_TOPLEVEL.

Во-вторых, вам необходимо объявить key_press_event(), прежде чем вы сможете сослаться на него в main(). У вас есть два варианта: либо переместить саму функцию раньше main(), или добавить строку

static gboolean key_press_event(GtkWidget* window, GdkEvent* event, gpointer label); 

раньше main().

В-третьих, вы хотите, чтобы key_press_event() возвращал FALSE, а не false.