Απορίες για c/c++
- cypher
- Venus Former Team Member
- Posts: 6207
- Joined: Mon Sep 29, 2008 9:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: Απορίες για c/c++
Φτιαχνω κατι αντιστοιχο με το thread της java για απορειες σε c/c++.
Και μια ερωτηση για οποιον/α ισως ξερει. Φτιαχνω εναν copy constructor και θελω να αντιγραψω αυτα (περισσοτερα ειναι απλα βαζω αυτα για παραδειγμα):
GtkWidget *example;
GtkTextBuffer *buffer;
GtkTextTag *Tag;
GtkTextSearchFlags NULLF;
Δεν θελω ομως να τα αντιγραψω κατ'αναφορα γιατι το αντικειμενο κλασης που τα εχει θα μπει σε vector και υποθετω οτι θα σβηνει τα αρχικα στοιχεια μετα την αντιγραφη. Υπαρχει κατι πιο ετοιμο (σαν αλλος copy constructor) για τα GtkWidgets κτλ;
Υποψιν δεν εχω εντρυφισει πολυ ακομα οποτε μπορει να ρωταω κατι προφανες.
Εδιτ: βασικα το δοκιμασα και δουλευει και με μεταφορα κατ'αναφορα αλλα μου φαινεται καπως improper. Αν εχετε καμια καλυτερη ιδεα πειτε ελευθερα.
---------------------
Εξτρα bonus ερωτηση:
Πως μπορω να ορισω στην κονσολα να μην εμφανιζεται καθε φορα που ξεκιναει το προγραμμα;
Και μια ερωτηση για οποιον/α ισως ξερει. Φτιαχνω εναν copy constructor και θελω να αντιγραψω αυτα (περισσοτερα ειναι απλα βαζω αυτα για παραδειγμα):
GtkWidget *example;
GtkTextBuffer *buffer;
GtkTextTag *Tag;
GtkTextSearchFlags NULLF;
Δεν θελω ομως να τα αντιγραψω κατ'αναφορα γιατι το αντικειμενο κλασης που τα εχει θα μπει σε vector και υποθετω οτι θα σβηνει τα αρχικα στοιχεια μετα την αντιγραφη. Υπαρχει κατι πιο ετοιμο (σαν αλλος copy constructor) για τα GtkWidgets κτλ;
Υποψιν δεν εχω εντρυφισει πολυ ακομα οποτε μπορει να ρωταω κατι προφανες.
Εδιτ: βασικα το δοκιμασα και δουλευει και με μεταφορα κατ'αναφορα αλλα μου φαινεται καπως improper. Αν εχετε καμια καλυτερη ιδεα πειτε ελευθερα.
---------------------
Εξτρα bonus ερωτηση:
Πως μπορω να ορισω στην κονσολα να μην εμφανιζεται καθε φορα που ξεκιναει το προγραμμα;
- AmmarkoV
- Wow! Terabyte level
- Posts: 2838
- Joined: Thu Nov 04, 2004 2:55 pm
- Gender: ♂
- Location: Reloaded @ Santa Friday
- Contact:
Re: Απορίες για c/c++
Κοίτα αυτά είναι 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 που λές αλλά πρέπει να μου εξηγίσεις πιο καλά τι θές γιατί κατα πάσα πιθανότητα δεν καταλαβαίνω τι ρωτάς!
Οπότε αν θές σε 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 που λές αλλά πρέπει να μου εξηγίσεις πιο καλά τι θές γιατί κατα πάσα πιθανότητα δεν καταλαβαίνω τι ρωτάς!
- Spoiler: εμφάνιση/απόκρυψη
- cypher
- Venus Former Team Member
- Posts: 6207
- Joined: Mon Sep 29, 2008 9:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: Απορίες για c/c++
Oκ καταλαβα πανω κατω.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 που λές αλλά πρέπει να μου εξηγίσεις πιο καλά τι θές γιατί κατα πάσα πιθανότητα δεν καταλαβαίνω τι ρωτάς!
Για το δευτερο καμια ιδεα;
Εξτρα bonus ερωτηση:
Πως μπορω να ορισω στην κονσολα να μην εμφανιζεται καθε φορα που ξεκιναει το προγραμμα;
- AmmarkoV
- Wow! Terabyte level
- Posts: 2838
- Joined: Thu Nov 04, 2004 2:55 pm
- Gender: ♂
- Location: Reloaded @ Santa Friday
- Contact:
Re: Απορίες για c/c++
Υποθέτω αυτό θα πρέπει να κάνει 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 μετά!
Γενικά προσωπικά χρησιμοποιώ 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;
}
- Spoiler: εμφάνιση/απόκρυψη
- cypher
- Venus Former Team Member
- Posts: 6207
- Joined: Mon Sep 29, 2008 9:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: Απορίες για c/c++
Σκετο window εμφανιζα και πριν αλλα παλι συνεχιζει να πεταγεται απο πισω η κονσολα για αυτο και ρωτησα. Βρηκα κατι googlaρωντας που ουσιαστικα μου λεει οτι αποφευγω την κονσολα αν βαλω μια win32main (or something like that) αλλα ηλπιζα σε μια πιο portable λυση.AmmarkoV wrote:Υποθέτω αυτό θα πρέπει να κάνει init ένα σκέτο Window..
Γενικά προσωπικά χρησιμοποιώ WxWidgets αλλά λόγω του ότι από κάτω bindings για GTK έχει σε linux είναι αρκετά λογικό
υ.γ. yeap βιβλιο θα αγορασω μολις εχω λεφτα.
- AmmarkoV
- Wow! Terabyte level
- Posts: 2838
- Joined: Thu Nov 04, 2004 2:55 pm
- Gender: ♂
- Location: Reloaded @ Santa Friday
- Contact:
Re: Απορίες για c/c++
το ξεκινάς μέσω κονσόλας ?
ή standalone ( μέσω του desktop environment )
ή standalone ( μέσω του desktop environment )
- Spoiler: εμφάνιση/απόκρυψη
- cypher
- Venus Former Team Member
- Posts: 6207
- Joined: Mon Sep 29, 2008 9:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: Απορίες για c/c++
Kαι στις δυο περιπτωσεις (και μεσω ide) βγαινει η κονσολα απο πισω.AmmarkoV wrote:το ξεκινάς μέσω κονσόλας ?
ή standalone ( μέσω του desktop environment )
Βαζω μια τον κωδικα
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;
}
- AmmarkoV
- Wow! Terabyte level
- Posts: 2838
- Joined: Thu Nov 04, 2004 2:55 pm
- Gender: ♂
- Location: Reloaded @ Santa Friday
- Contact:
Re: Απορίες για c/c++
Αν ανοίξεις το exe από τον Desktop Manager κατα πάσα πιθανότητα μπορεί να μην ανοίγει και η κονσόλα , μπορεί να είναι το stderr ξέρω γω ή κάτι άλλο IDE specific..
- Spoiler: εμφάνιση/απόκρυψη
- cypher
- Venus Former Team Member
- Posts: 6207
- Joined: Mon Sep 29, 2008 9:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: Απορίες για c/c++
Νοpe ανοιγει οπως και να τρεξω το .exe . Θα δοκιμασω και σε linux αργοτερα να δω τι κανει εκει. Ισως το καθοριζει το namespace του std or something like that, dunno.AmmarkoV wrote:Αν ανοίξεις το exe από τον Desktop Manager κατα πάσα πιθανότητα μπορεί να μην ανοίγει και η κονσόλα , μπορεί να είναι το stderr ξέρω γω ή κάτι άλλο IDE specific..
Προσωρινα προσθεσα αυτα:
Code: Select all
#include <windows.h>
.....
FreeConsole();