Προς το περιεχόμενο

C++ gui


miza

Προτεινόμενες αναρτήσεις

Δημοσ.

Έψαχνα όλο το πρωί στο ΝΕΤ για τις πιθανές επιλογές και κατέληξα ότι μόνο με ένα περιβάλλον δεν πρόκειται να κάνω τη δουλειά μου...

Επομένως θα ακολουθήσω τη συμβουλή σου .... NET για GUI και όπου υπάρχει κάτι σε dll και C++

Μόλις κολήσω κάπου θα έχετε τα νέα μου:)

 

 

λοιπον, στη θεση σου θα πηγαινα για .ΝΕΤ

 

οπου υπηρχε ετοιμος κωδικας σε c++ θα καθομουν να τον μετατρεψω σε .NET

Υπαρχει βεβαια και η δυναντοτητα να καλεσεις c++ κωδικα μεσα απο το .NET ας πουμε κανοντας τον dll.... Δε ξερω για τι μεγεθη μιλαμε βεβαια.

 

Anyway, oταν αντιμετωπισεις προβλημα με τη μεταφορα του κωδικα απο τη μια γλωσσα στην αλλη, εδω ειμαστε για βοηθεια

  • Απαντ. 55
  • Δημ.
  • Τελ. απάντηση
Δημοσ.
Πρέπει να σημειώσω ότι δεν είμαι φανατικός της Microsoft απλά έτυχε να ασχοληθώ με τη VS για κάτι μικρές εφαρμογές για PDA όπου η Borland ήταν ανύπαρκτη.

Το να επιλέξω το κατάλληλο περιβάλλον είνια πολύ σημαντικό και τελικά το παντρεύεσαι.... από την άλλη όταν δεν υπάρχουν αρκετά παραδείγματα μπορεί να αποτελέσει μεγάλο πρόβλημα και χάσιμο χρόνου στην αντιμετώπιση μικρών προβλημάτων.

Έχεις χρησιμποιήσει και άλλα framework για τη C++?

 

Για PDA programming πειραματίζομαι και εγώ με .NET CF και C# ;) οπότε το VS .NET είναι μονόδρομος όσον αφορά το managed code για τα PDA εκτός βέβαια και αν θες να ασχοληθείς με native programming και εκεί οπότε υπάρχει η ανάλογη εκδοχή του MFC :)

 

Πριν στραφώ στον C++ Builder & VCL είχα χρησιμοποιήσει για κάμποσο καιρό το Borland OWL και για πολύ λίγο διάστημα το MFC και φυσικά καθαρό Windows API. Αυτή την εποχή κοιτώ (ανιχνεύω αν θες..) το QT (με το QT Creator) καθώς έχει ξεκινήσει το port του σε Symbian OS πράγμα που με ενδιαφέρει αρκετά –αλλά δεν έχω ουσιαστική εξοικείωση μαζί του και οπωσδήποτε δεν είναι τόσο φιλικό όσο η VCL :( (αλλά σίγουρα είναι πολύ δυνατό σε κάποια άλλα σημεία από αυτά που διαβάζω).

 

Αν ξεκινούσα σήμερα πάντως θα επέλεγα κάτι που να είναι portable (σε πολλές πλατφόρμες) – μπορεί το QT, αλλά τον καιρό που επέλεξα οπτική πλατφόρμα για Windows development η VCL ήταν η καλύτερη επιλογή –και σε γενικές γραμμές εξακολουθεί να είναι (αλλά σε Windows πάντα και όχι άλλου).

Δημοσ.
Για PDA programming πειραματίζομαι και εγώ με .NET CF και C# ;) οπότε το VS .NET είναι μονόδρομος όσον αφορά το managed code για τα PDA εκτός βέβαια και αν θες να ασχοληθείς με native programming και εκεί οπότε υπάρχει η ανάλογη εκδοχή του MFC

 

H εφαρμογούλα που είχα κάνει για PDA (Ασύρματη παραγγελιοληψία) δουλεύει μέχρι σήμερα άψογα ... και ο χρόνος που είχα αφιερωσει σάυτή (θεωρόντας πάντα ότι ξεκίνησα χωρίς να ξέρω τιπτα για C#) μου φάνηκε λογικός.

Εκείνη την εποχή είχα κοιτάξει το QT (QT Creator) καθώς και (NetBeans) JAVA και απόλα μου φάνηκε το VS με το C# πιο φιλική λύση.

Την NetBeans την χρησιμοποιώ και σήμερα για PHP coding.

 

Αν ξεκινούσα σήμερα πάντως θα επέλεγα κάτι που να είναι portable (σε πολλές πλατφόρμες) – μπορεί το QT, αλλά τον καιρό που επέλεξα οπτική πλατφόρμα για Windows development η VCL ήταν η καλύτερη επιλογή –και σε γενικές γραμμές εξακολουθεί να είναι (αλλά σε Windows πάντα και όχι άλλου)

 

Η αλήθεια είνια ότι με ενδιαφέρει μόνο η πλατφόρμα Windows (πραγματικά δεν έχω χρόνο να ασχοληθώ με άλλα λειτουργικά ... αν και θα το ήθελα)

 

 

Σχετικά με το phD βρήκα κάτι που να μοιάζει αρκετά με αυτό που θέλω να κάνω αλλά είνια γραμμένο σε FORTRAN :fear: .... είνια πραγματικά τεράστιος κώδικας με τον οποίο θα ασχοληθώ αυτές τις μέρες.

Δημοσ.

+1 για .net 3 GUI.

  1. Polyline: Για την αναπαραστηαση μιας συναρτησης
  2. Viewbox: για καλυτερη αναπαρασταση μιας συναρτησης
  3. Viewport3D: Για πολυ καλυτερη αναπαρασταση

ΥΓ: Ενα απλο παραδιγμα για να δεις και την ευκολια

singwm.th.jpg

code

 

 

xaml

>  <Grid>
       <Canvas Height="200" Width="200" Name="canvas1" >
           <Polyline x:Name="X" Stroke="Black" Fill="Black" Points="0,100,200,100"/>
           <Polyline x:Name="Y" Stroke="Black" Fill="Black" Points="100,0,100,200"/>
           <Canvas.RenderTransform>
               <RotateTransform Angle="270" CenterX="100" CenterY="100"/>
           </Canvas.RenderTransform>
       </Canvas>
   </Grid>

c# funcs

>public partial class Window1 : Window
   {
       public Window1()
       {
           InitializeComponent();
           sin(.1,20);
       }

       private void sin(double deep,double size)
       {
           Polyline p = new Polyline
           {
               Stroke = new SolidColorBrush(Colors.Red),
               Fill = new SolidColorBrush(Colors.Transparent)
           };
           PointCollection pc = new PointCollection();
           pc.Add(CreatePoint(0, 0));
           for (double i = 0.0; i < 100.0/size; i+=deep)
           {
               pc.Add(CreatePoint (Math.Sin(i)*size,i*size));
           }
           p.Points = pc;
           canvas1.Children.Add(p);
          
       }

       private Point CreatePoint(double x, double y)
       {
           return new Point(x + 100.0, y + 100.0);
       }
   }

και αν δε θελεις xaml code

>
public partial class Window1 : Window
   {
       private Canvas mycanvas;
       public Window1()
       {
           InitializeComponent();
           mycanvas = canvas;
           var btn = new Button { Content = "Sin", HorizontalAlignment = HorizontalAlignment.Right,Height=20 };
           btn.Click += delegate { sin(.01, 20); };
           this.Content = new Grid 
           {
               Children = { mycanvas,btn }
           };
       }
       private Canvas canvas
       {
           get
           {
               return new Canvas
                 {
                     Height = 200,
                     Width = 200,
                     Margin =new Thickness(0,30,0,0),
                     HorizontalAlignment = HorizontalAlignment.Center,
                     VerticalAlignment = VerticalAlignment.Top,
                     Children =
                   {
                       new Polyline
                       {
                           Stroke=new SolidColorBrush(Colors.Black),
                           Fill=new SolidColorBrush(Colors.Transparent),
                           Points={new Point(100,0),new Point(100,200)}
                       },
                       new Polyline
                       {
                           Stroke=new SolidColorBrush(Colors.Black),
                           Fill=new SolidColorBrush(Colors.Transparent),
                           Points={new Point(0,100),new Point(200,100)}
                       }
                   },
                     RenderTransform = new RotateTransform { CenterX = 100, CenterY = 100, Angle = 270 }
                 };
           }
       }
       private void sin(double deep, double size)
       {
           Polyline p = new Polyline
           {
               Stroke = new SolidColorBrush(Colors.Red),
               Fill = new SolidColorBrush(Colors.Transparent)
           };
           PointCollection pc = new PointCollection();
           pc.Add(CreatePoint(0, 0));
           for (double i = 0.0; i < 100.0 / size; i += deep)
           {
               pc.Add(CreatePoint(Math.Sin(i) * size, i * size));
           }
           p.Points = pc;
           mycanvas.Children.Add(p);

       }

       private Point CreatePoint(double x, double y)
       {
           return new Point(x + 100.0, y + 100.0);
       }
   }

και αν κανεις χρηση του delegate

 

 

>
public partial class Window1 : Window
   {
       private Canvas mycanvas;
       public Window1()
       {
           InitializeComponent();
           mycanvas = canvas;
           Button btnsin, btncos, btntan;
           btntan = new Button { Content = "Tan", VerticalAlignment = VerticalAlignment.Top, Height = 20 };
           btnsin = new Button { Content = "Sin", HorizontalAlignment = HorizontalAlignment.Right,Height=20 };
           btncos = new Button { Content = "Cos", HorizontalAlignment = HorizontalAlignment.Left, Height = 20 };
           btnsin.Click += delegate { grafikiapikonisi(.01, 20,[color="red"]Math.Sin[/color]); };
           btncos.Click += delegate { grafikiapikonisi(.01, 20, [color="red"]Math.Cos[/color]); };
           btntan.Click += delegate { grafikiapikonisi(.01, 10, [color="red"]Math.Tan[/color]); };
           this.Content = new Grid 
           {
               Children = { mycanvas,btnsin,btncos,btntan }
           };
       }
       private Canvas canvas
       {
           get
           {
               return new Canvas
                 {
                     Height = 200,
                     Width = 200,
                     Margin =new Thickness(0,30,0,0),
                     HorizontalAlignment = HorizontalAlignment.Center,
                     VerticalAlignment = VerticalAlignment.Top,
                     Children =
                   {
                       new Polyline
                       {
                           Stroke=new SolidColorBrush(Colors.Black),
                           Fill=new SolidColorBrush(Colors.Transparent),
                           Points={new Point(100,0),new Point(100,200)}
                       },
                       new Polyline
                       {
                           Stroke=new SolidColorBrush(Colors.Black),
                           Fill=new SolidColorBrush(Colors.Transparent),
                           Points={new Point(0,100),new Point(200,100)}
                       }
                   },
                     RenderTransform = new RotateTransform { CenterX = 100, CenterY = 100, Angle = 270 }
                 };
           }
       }
     
       private void grafikiapikonisi(double deep, double size,[color="red"]Func<double,double> math[/color])
       {
           
           Polyline p = new Polyline
           {
               Stroke = new SolidColorBrush(Colors.Red),
               Fill = new SolidColorBrush(Colors.Transparent)
           };
           PointCollection pc = new PointCollection();
           pc.Add(CreatePoint(0, 0));
           for (double i = 0.0; i < 100.0 / size; i += deep)
           {
               pc.Add(CreatePoint([color="Red"]math[/color](i) * size, i * size));
           }
           p.Points = pc;
           mycanvas.Children.Add(p);

       }

       private Point CreatePoint(double x, double y)
       {
           return new Point(x + 100.0, y + 100.0);
       }
   }

 

 

 

 

Δημοσ.

GUI παντως μπορεις να φτιαξεις και στο MATLAB γρηγορα και ευκολα (δες το GUIDE). Αν θες mcc -a και το κανεις standalone .exe αρχειο. :-)

Δημοσ.
GUI παντως μπορεις να φτιαξεις και στο MATLAB γρηγορα και ευκολα (δες το GUIDE). Αν θες mcc -a και το κανεις standalone .exe αρχειο. :-)

 

Έχεις δίκιο και το είχα ψάξει κάποτε .... απλά μου φάνηκε τελείως πρωτόγονος τρόπος και δεν είχε καμία σχέση με αυτό που είχα στο μυαλό μου.

 

Evgenios1; +1 για .net 3 GUI.

 

1. Polyline: Για την αναπαραστηαση μιας συναρτησης

2. Viewbox: για καλυτερη αναπαρασταση μιας συναρτησης

3. Viewport3D: Για πολυ καλυτερη αναπαρασταση

Πολύ ωραία παραδείγματά σου φίλε... αυτό ήταν το επόμενο βήμα που θα έκανα δηλ η αναπαράσταση των αποτελεσμάτων σε γραφικές παραστάσεις.... βρήκα ZedGraph αν και δεν το δοκίμασα ακόμα.

Δημοσ.
Έχεις δίκιο και το είχα ψάξει κάποτε .... απλά μου φάνηκε τελείως πρωτόγονος τρόπος και δεν είχε καμία σχέση με αυτό που είχα στο μυαλό μου.

 

Εχεις δικιο πριν αρκετα χρονια ηταν πρωτόγονα...

 

Για του λογου του αληθες παντως σου κανω post ενα screenshot απο ενα app που εφτιαξα προσφατα.

Δημοσ.

Βλέπωντας τη φώτο σου μπήκα σε πειρασμό να σκεφτώ σε πόσο χρόνο θα μπορούσα να το κάνω σε C# :)

 

 

 

Εχεις δικιο πριν αρκετα χρονια ηταν πρωτόγονα...

 

Για του λογου του αληθες παντως σου κανω post ενα screenshot απο ενα app που εφτιαξα προσφατα.

Δημοσ.
Βλέπωντας τη φώτο σου μπήκα σε πειρασμό να σκεφτώ σε πόσο χρόνο θα μπορούσα να το κάνω σε C# :)

 

Σε MATLAB το app που βλεπεις αντιστοιχει σε 100 (80 χωρις τα σχόλια!) γραμμες κωδικα (GUI + Engine).

 

Αν θες να φτιαξεις κατι που εχει μαθηματικα και γραφικες παραστασεις τοτε νομιζω οτι το MATLAB ειναι οτι καλυτερο μπορεις να διαλεξεις.:-)

 

H C# δεν μπορω να πω οτι μου αρεσει...και δεν βλεπω και τον λογο.

 

Το ιδιο app το εχω φτιαξει για πλακα και σε C (οχι C++) με απευθειας χρηση του WinApi για το GUI.

Δημοσ.

To gui που έχω φτιαξει είναι πιο πολύπλοκο... αλλά θα ενσωματώνει και γραφικές παραστάσεις...

Μου άρεσε το MATLAB κυρίως για την φιλικότητά του και την ευκολία με την οποία μπορώ να κάνω έλεγχο στις πράξεις ....

 

Σε MATLAB το app που βλεπεις αντιστοιχει σε 100 (80 χωρις τα σχόλια!) γραμμες κωδικα (GUI + Engine).

 

Αν θες να φτιαξεις κατι που εχει μαθηματικα και γραφικες παραστασεις τοτε νομιζω οτι το MATLAB ειναι οτι καλυτερο μπορεις να διαλεξεις.:-)

 

H C# δεν μπορω να πω οτι μου αρεσει...και δεν βλεπω και τον λογο.

 

Το ιδιο app το εχω φτιαξει για πλακα και σε C (οχι C++) με απευθειας χρηση του WinApi για το GUI.

post-130071-129062991955_thumb.jpg

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...