Kleine Frage zu GTK+ Hallo Welt



  • Hi !

    Ich binn recht neu hier und habe eigendlich nur eine klitze kleine frage zu GTK+

    Folgender Code ist Problemlos auf Linux/Windows mit MinGW kompilierbar und läuft auch wunderbar !:

    #include <gtk/gtk.h>
    
    //Globales (Builder Variablen):
    GtkBuilder 	 *builder; 
    GtkWidget   	*window;
    GtkWidget   	*button;
    GtkWidget   	*textview;
    GtkWidget   	*label;
    GtkTextBuffer   *buffer;
    
    //Callback Funktionen:
    void on_window_destroy (GtkObject *object, gpointer user_data)
    {
        gtk_main_quit ();
    }
    
    void on_button_clicked (GtkObject *object, gpointer user_data)
    {
    	g_print ("Hallo Welt\n");
    	gtk_label_set_text(GTK_LABEL(label), "Hallo Welt");
    	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
    	gtk_text_buffer_set_text(buffer,"Hallo Welt\n",-1);
    }
    
    int main(int argc, char *argv[])
    {
        //Gtk Initialisieren, Glade file auslesen und binden.
    	gtk_init (&argc, &argv);
    	builder = gtk_builder_new ();
        gtk_builder_add_from_file (builder, "HalloWelt.glade", NULL);
    	window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
        button = GTK_WIDGET (gtk_builder_get_object (builder, "button1"));
    	label = GTK_WIDGET (gtk_builder_get_object (builder, "label1"));
    	textview = GTK_WIDGET (gtk_builder_get_object (builder, "textview1"));
    
    	//Signale mit Rückruffunktionen verbinden.
    	g_signal_connect (window, "destroy", G_CALLBACK (on_window_destroy), NULL);
    	g_signal_connect (button, "clicked", G_CALLBACK (on_button_clicked), NULL);
    	gtk_builder_connect_signals (builder, NULL);
    
    	//GTK-Show.
        g_object_unref (G_OBJECT (builder));
        gtk_widget_show (window);                
        gtk_main ();
        return 0;
    }
    

    Was mich jezt allerdings stört, ist die Konsole dich ich u.a mit g_print() beschreiben kann... Kann man diese irgendwie deaktievieren ?!?

    Schon mal Herzlichen Dank für jedliche Antwort !

    Mfg McMorf



  • Dass die Konsole beschrieben werden kann halte ich für nützlich und wünschenswert.
    Wenn es dich stört, nimm doch einfach die g_print() -Aufrufe raus.

    g_print kannst du aber besonders einfach umleiten, du musst nur einen Handler installieren:

    static void ignore_print_func (const gchar *string) { /* do nothing */ }
    
    /* Damit wird g_print - und nur g_print - ignoriert */
    g_set_print_handler (ignore_print_func);
    

    analoges ist mit g_set_printerr_handler() für g_printerr() möglich.

    Willst du wirklich alles komplett dicht abriegeln, musst du die Standard-IO-Streams bearbeiten und das kann kompliziert werden.



  • entschuldigung, ich hab mich doof ausgedrückt....

    Also ich halte g_print() für sehr praktisch !
    Mir geht es nicht darum auf g_print zu verzichten....
    Mir geht es nur darum, eine Gui zu Haben bei der kein konsolenfenster geöfnet wird....

    als beispiel:
    Ich schreibe eine Applikation mit einem Button und einem Label.
    Wenn ich auf den Button drücke, soll das Label mit "Hallo Welt" beschrieben werden.

    Diese Applikation soll NICHT!!! zusätzlich ein Konsolenfenster öffnen, es sei denn ich übergebe ihr beim start z.b sowas wie --debug oder so...

    Mfg McMorf



  • Leider wir die Konsole auch aufgerufen wenn ich gprint nicht verwende...



  • McMorf schrieb:

    Leider wir die Konsole auch aufgerufen wenn ich gprint nicht verwende...

    Das muss ein Windows-spezifisches Problem sein. Da muss man irgendwie beim Kompillieren explizit angeben, dass das Programm GUI-Anwendung ist.

    Schau dir dazu die Dokumentation über den GTK+ Build-Vorgang in Windows an. Mehr weiss ich dazu nicht.



  • mist...

    in den GTK+ reference manuals hab ich mich schon doof gesucht...
    ich habe sowas mal vor etlicher zeit in irgend einem tutorial gesehen....

    aber erst mal trozdem herzlichen dank für die antworten !

    ich hoffe mal weiter...
    vlt finde ich ja was, oder jemand hatt doch noch die passende lösung..

    Mfg McMorf



  • Habe ich vlt was mit Glade Falsch gemacht ?

    Hier mal die XML-Datei:

    <?xml version="1.0"?>
    <interface>
      <!-- interface-requires gtk+ 2.8 -->
      <!-- interface-naming-policy project-wide -->
      <object class="GtkWindow" id="window1">
        <property name="title" translatable="yes">Glade Hallo Welt</property>
        <property name="resizable">False</property>
        <property name="window_position">center</property>
        <property name="destroy_with_parent">True</property>
        <property name="icon">DB.ico</property>
        <child>
          <object class="GtkFixed" id="fixed1">
            <property name="visible">True</property>
            <child>
              <object class="GtkButton" id="button1">
                <property name="label" translatable="yes">Hallo Welt
                </property>
                <property name="width_request">110</property>
                <property name="height_request">24</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_STRUCTURE_MASK</property>
              </object>
              <packing>
                <property name="x">159</property>
                <property name="y">310</property>
              </packing>
            </child>
            <child>
              <object class="GtkTextView" id="textview1">
                <property name="width_request">400</property>
                <property name="height_request">43</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
              </object>
              <packing>
                <property name="x">6</property>
                <property name="y">256</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button2">
                <property name="label" translatable="yes">button</property>
                <property name="width_request">1</property>
                <property name="height_request">1</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="x">401</property>
                <property name="y">338</property>
              </packing>
            </child>
            <child>
              <object class="GtkLabel" id="label1">
                <property name="width_request">252</property>
                <property name="height_request">32</property>
                <property name="visible">True</property>
                <property name="label" translatable="yes">label</property>
              </object>
              <packing>
                <property name="x">93</property>
                <property name="y">72</property>
              </packing>
            </child>
          </object>
        </child>
      </object>
      <object class="GtkListStore" id="liststore1"/>
    </interface>
    


  • Ich habe Die Lösung gefunden !

    Scheinbar ist das ganze ein M$ Windoof "Problem"...

    #ifdef _WIN32
    #include <windows.h>
    #endif 
    
    void ConsoleW32_OFF(void)
    {
       #ifdef _WIN32
       FreeConsole();
       #endif 
    }
    

    Super Herzlichen Dank für eure Bemühungen !!!!

    MFG McMorf



  • wenn man mit MinGW kompiliert einfach

    -mwindows

    mit übergeben

    MfG McMorf


Anmelden zum Antworten