Page 1 of 1

Re: Απορίες για c/c++

Posted: Wed Feb 24, 2010 1:11 am
by cypher
Φτιαχνω κατι αντιστοιχο με το thread της java για απορειες σε c/c++. :-p
Και μια ερωτηση για οποιον/α ισως ξερει. Φτιαχνω εναν copy constructor και θελω να αντιγραψω αυτα (περισσοτερα ειναι απλα βαζω αυτα για παραδειγμα):
GtkWidget *example;
GtkTextBuffer *buffer;
GtkTextTag *Tag;
GtkTextSearchFlags NULLF;
Δεν θελω ομως να τα αντιγραψω κατ'αναφορα γιατι το αντικειμενο κλασης που τα εχει θα μπει σε vector και υποθετω οτι θα σβηνει τα αρχικα στοιχεια μετα την αντιγραφη. Υπαρχει κατι πιο ετοιμο (σαν αλλος copy constructor) για τα GtkWidgets κτλ;
Υποψιν δεν εχω εντρυφισει πολυ ακομα οποτε μπορει να ρωταω κατι προφανες. :-p
Εδιτ: βασικα το δοκιμασα και δουλευει και με μεταφορα κατ'αναφορα αλλα μου φαινεται καπως improper. Αν εχετε καμια καλυτερη ιδεα πειτε ελευθερα. :)

---------------------
Εξτρα bonus ερωτηση:
Πως μπορω να ορισω στην κονσολα να μην εμφανιζεται καθε φορα που ξεκιναει το προγραμμα; :-p

Re: Απορίες για c/c++

Posted: Wed Feb 24, 2010 5:58 pm
by AmmarkoV
Κοίτα αυτά είναι pointers..
Οπότε αν θές σε C να κάνεις "βαθύ" αντίγραφο ( το GTK είναι σε C ) θα πρέπει πρώτα να ξέρεις το μέγεθος του κάθε ενός και στην συνέχεια να το copiάρεις bit by bit..

για παράδειγμα
memcpy ( target_example , example , sizeof(GtkWidget) );
memcpy ( target_buffer, buffer , sizeof( GtkTextBuffer ) ) ;
memcpy ( target_tag, Tag , sizeof( GtkTextTag ) );

κτλ..

έτσι αποκλείεται να είναι invalid οι pointers στο vector που λές αλλά πρέπει να μου εξηγίσεις πιο καλά τι θές γιατί κατα πάσα πιθανότητα δεν καταλαβαίνω τι ρωτάς!

Re: Απορίες για c/c++

Posted: Wed Feb 24, 2010 8:03 pm
by cypher
AmmarkoV wrote:Κοίτα αυτά είναι pointers..
Οπότε αν θές σε C να κάνεις "βαθύ" αντίγραφο ( το GTK είναι σε C ) θα πρέπει πρώτα να ξέρεις το μέγεθος του κάθε ενός και στην συνέχεια να το copiάρεις bit by bit..

για παράδειγμα
memcpy ( target_example , example , sizeof(GtkWidget) );
memcpy ( target_buffer, buffer , sizeof( GtkTextBuffer ) ) ;
memcpy ( target_tag, Tag , sizeof( GtkTextTag ) );

κτλ..

έτσι αποκλείεται να είναι invalid οι pointers στο vector που λές αλλά πρέπει να μου εξηγίσεις πιο καλά τι θές γιατί κατα πάσα πιθανότητα δεν καταλαβαίνω τι ρωτάς!
Oκ καταλαβα πανω κατω. :-)
Για το δευτερο καμια ιδεα;
Εξτρα bonus ερωτηση:
Πως μπορω να ορισω στην κονσολα να μην εμφανιζεται καθε φορα που ξεκιναει το προγραμμα; :-p

Re: Απορίες για c/c++

Posted: Wed Feb 24, 2010 10:41 pm
by AmmarkoV
Υποθέτω αυτό θα πρέπει να κάνει init ένα σκέτο Window..
Γενικά προσωπικά χρησιμοποιώ WxWidgets αλλά λόγω του ότι από κάτω bindings για GTK έχει σε linux είναι αρκετά λογικό :)

Επίσης θα σου πρότεινα να παραγγείλεις από το internet κανένα βιβλίο για ανάπτυξη εφαρμογών με GTK ( πχ http://www.amazon.com/Foundations-Devel ... 1590597931 ) , για wxWidgets αυτό που πήρα ( http://www.amazon.com/Cross-Platform-Pr ... d_sim_b_15 ) πραγματικά λύνει πολλές απορίες και καταλαβαίνεις όλο τον σχεδιασμό από την αρχή οπότε κάνουν πολλά πράγματα sense μετά! :)

Code: Select all

##include <gtk/gtk.h>
int
main (int argc, char **argv)
{
  GtkWidget     *win, *but;
  gtk_init( &argc, &argv );
  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (win, "delete-event",
                    G_CALLBACK (gtk_true), NULL);
  g_signal_connect (win, "destroy",
                    G_CALLBACK (gtk_main_quit), NULL);
  but = gtk_button_new_with_label ("Close yourself. I mean it!");
  g_signal_connect_swapped (but, "clicked",
                  G_CALLBACK (gtk_object_destroy), win);
  gtk_container_add (GTK_CONTAINER (win), but);
  gtk_widget_show_all (win);
  gtk_main ();
  return 0;
}

Re: Απορίες για c/c++

Posted: Wed Feb 24, 2010 11:29 pm
by cypher
AmmarkoV wrote:Υποθέτω αυτό θα πρέπει να κάνει init ένα σκέτο Window..
Γενικά προσωπικά χρησιμοποιώ WxWidgets αλλά λόγω του ότι από κάτω bindings για GTK έχει σε linux είναι αρκετά λογικό :)
Σκετο window εμφανιζα και πριν αλλα παλι συνεχιζει να πεταγεται απο πισω η κονσολα για αυτο και ρωτησα. Βρηκα κατι googlaρωντας που ουσιαστικα μου λεει οτι αποφευγω την κονσολα αν βαλω μια win32main (or something like that) αλλα ηλπιζα σε μια πιο portable λυση. :-p
υ.γ. yeap βιβλιο θα αγορασω μολις εχω λεφτα. :-)

Re: Απορίες για c/c++

Posted: Thu Feb 25, 2010 12:08 am
by AmmarkoV
το ξεκινάς μέσω κονσόλας ?
ή standalone ( μέσω του desktop environment )

Re: Απορίες για c/c++

Posted: Thu Feb 25, 2010 12:17 am
by cypher
AmmarkoV wrote:το ξεκινάς μέσω κονσόλας ?
ή standalone ( μέσω του desktop environment )
Kαι στις δυο περιπτωσεις (και μεσω ide) βγαινει η κονσολα απο πισω. :-p
Βαζω μια τον κωδικα

Code: Select all

#include <gtk/gtk.h>
#include <glib/gerror.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <stdio.h>

using namespace std;
....

     int main (int argc, char *argv[]) {
    GtkWidget *window;
    GtkWidget *nb;
    GtkWidget *vbox;

    gtk_init(&argc, &argv);  //initialization of the gtk library

    /* Create the main window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  
    gtk_container_set_border_width (GTK_CONTAINER (window), 8); 
    gtk_window_set_title (GTK_WINDOW (window), "Title");  
    gtk_window_set_position (GTK_WINDOW (window),GTK_WIN_POS_CENTER);
    //Window width and height are loaded from the options
    gtk_window_set_default_size(GTK_WINDOW(window),..μπλα μπλα σωστα arguments...);
    gtk_widget_realize(window);
    //connects the X button to the exit function
    g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    /* The notebook */
    nb = gtk_notebook_new();
    gtk_notebook_set_scrollable(GTK_NOTEBOOK(nb), TRUE);
    tab::init(nb);

    /* Pack things in a vbox */
    vbox = gtk_vbox_new (TRUE, 6);
    gtk_container_add (GTK_CONTAINER (window), vbox);
    gtk_box_pack_start (GTK_BOX (vbox), nb, TRUE, TRUE, 0);


    .....ασχετα κομματια οπου απλα βαζω tabs στο notebook...


    gtk_widget_show_all(window); 
    gtk_main();  

    return 0;
}
Δυσκολευομαι να καταλαβω τι μπορει να λειπει. :smt017 Δεν εχω κατι που να τυπωνει στο cout η να ζηταει input απο cin ετσι ωστε να ξεκιναει μονη η κονσολα.

Re: Απορίες για c/c++

Posted: Thu Feb 25, 2010 12:21 am
by AmmarkoV
Αν ανοίξεις το exe από τον Desktop Manager κατα πάσα πιθανότητα μπορεί να μην ανοίγει και η κονσόλα , μπορεί να είναι το stderr ξέρω γω ή κάτι άλλο IDE specific..

Re: Απορίες για c/c++

Posted: Thu Feb 25, 2010 12:47 am
by cypher
AmmarkoV wrote:Αν ανοίξεις το exe από τον Desktop Manager κατα πάσα πιθανότητα μπορεί να μην ανοίγει και η κονσόλα , μπορεί να είναι το stderr ξέρω γω ή κάτι άλλο IDE specific..
Νοpe ανοιγει οπως και να τρεξω το .exe . Θα δοκιμασω και σε linux αργοτερα να δω τι κανει εκει. :-p Ισως το καθοριζει το namespace του std or something like that, dunno. :smt017

Προσωρινα προσθεσα αυτα:

Code: Select all

#include <windows.h>
.....
FreeConsole();

Αν βρεθει καμια πιο universal λυση το αλλαζω.