PDA

View Full Version : [UI Design] C++, C++ .NET, C++ MFC o C#?


peng
10-03-2010, 12:23
Ciao a tutti,

sto lavorando ad un progetto per il quale ho difficolta' a capire che linguaggio e framework utilizzare.

Uno dei problemi princiapli che sto trovando e' che non riesco a capire come variare a runtime il numero di box e label. Infatti l'idea sarebbe quella di permettere all'utente di caricare un file con delle misurazioni. Questo file e' quindi visualizzato in un pannello e a fianco del pannello v'e' una label con checkox o simile che indica se il file e' visualizzato. Mi domandavo come poter permettere all'utente di aggiungere + file e quindi visualizzare una checkbox per ogni file aggiunto. L'idea e' che il grafico accorpori tutte i file aggiunti.

Non capisco se vi sono particolari vantaggi usando un linguaggio o l'altro.

Inoltre mi domandavo se qualcuno di voi avesse usato Dundas Chart per visualizzare grafici nelle vostre applicazioni. http://www.dundas.com/Components/Products/Chart/index.aspx

Vi ringrazio!

Daniele

cionci
10-03-2010, 12:32
Tu quali linguaggi conosci ?

In praticamente qualsiasi framework è possibile aggiungere checkbox e tab a runtime.
Considera anche C++ e Qt da utilizzare con l'IDE QtCreator.

peng
16-03-2010, 15:21
Grazie,

io conosco C++, Java, Perl, OCaml e Cobol.

Si tratta di una scelta di team. Stiamo cercando di caprie se usare MFC oppure .NET per un nuovo software. Domani iniziamo una tre giorni di corso in MFC. Riguardo .NET possiamo chiedere di fare un corso se necessario.

Il progetto dura 14 mesi e dobbiamo fare la prima realease tra 3 mesi. L'application e' desktop based.

Stiamo ragionando in termini di velocita' di programmazione vs mantenibilita' del codice.

Vorremmo poter implementare qualcosa velocemente ma che sia anche facilmente mantenibile.

Per quanto riguarda l'aspetto grafico ho trovato alcune librerie che usando MFC migliorerebbero parecchio l'aspetto della applicazione (e fare anche in maniere facile la domanda che ponevo prima - http://www.bcgsoft.com/FeatureTour/bcgcontrolbar-tour.htm - ho appena scritto un post simile nel forum, quindi spero non sia un doppione).

Per quanto riguarda la visualizzazione di grafici (richiesta dai nostri requisiti) ho trovato Dundas Chart (http://www.dundas.com/Components/Products/Chart/index.aspx). Purtroppo pero' non supporta MFC.. hai consigli di librerie simili in MFC?

Ti ringrazio!

Consigli?

cionci
16-03-2010, 16:06
MFC secondo me è la scelta peggiore possibile. Il problema di programmare in managed C++ (utilizzando quindi .Net) è che il linguaggio è un po' stravolto, ma se puoi convivere con questa mancanza, allora te lo consiglio vivamente
Come ho già scritto, prendete in considerazione anche Qt. Rispetto a MFC è molto più semplice e meno verbosa, quindi più facilmente manutenibile. Riguardo a librerie per grafici basate su Qt: http://qwt.sourceforge.net/
Tutto gratuito e non devi comprare niente, nemmeno Visual Studio, se ti accontenti di QtCreator.

Pixel452
16-03-2010, 17:33
Se il target è solo Windows ti consiglio WPF, si programma in C# e fa parte del Framework .NET. E’ abbastanza diverso da programmare rispetto alle MFC ed introduce molti concetti nuovi rispetto alle precedenti librerie Microsoft, quindi prevedi un primo periodo di “ambientamento”. I grafici dovrebbero esserci ma sono assembly inclusi in Expression Blend, noi in ditta usiamo le librerie della Syncfusion che però sono a pagamento. Googlando dovresti trovarne anche di gratuite.

Qui puoi trovare Blend, un potentissimo strumento per la creazione delle UI
http://www.microsoft.com/expression/

tomminno
16-03-2010, 19:09
Se il target è solo Windows ti consiglio WPF, si programma in C# e fa parte del Framework .NET. E’ abbastanza diverso da programmare rispetto alle MFC ed introduce molti concetti nuovi rispetto alle precedenti librerie Microsoft, quindi prevedi un primo periodo di “ambientamento”. I grafici dovrebbero esserci ma sono assembly inclusi in Expression Blend, noi in ditta usiamo le librerie della Syncfusion che però sono a pagamento. Googlando dovresti trovarne anche di gratuite.

Qui puoi trovare Blend, un potentissimo strumento per la creazione delle UI
http://www.microsoft.com/expression/

Non mi risulta però che esista una versione di Expression Blend gratuita.

Pixel452
16-03-2010, 21:38
Se ha una licenza MSDN dovrebbe essere compreso. Diciamo che Blend non è assolutamente indispensabile, è molto bello e potente ma puoi farne a meno, dipende molto da che tipo di programma stai sviluppando. Se devi contenere i costi puoi usare Visual Studio 2008 Express Edition, non credo ti serva altro.

Un consiglio, se scegli WPF, compra un libro e studiatelo, roba da 3 giorni, cambierà la tua esperienza di lavoro. Conosco gente che lo usa come se fosse MFC e ti assicuro, non è da imitare. Prenditi il tempo che ti serve, credo che valga la stessa cosa per qualsiasi libreria tu scelga.

p.s. questo "Windows Presentation Foundation Unleashed" è buono

WarDuck
16-03-2010, 22:02
Se non erro Visual Studio Express non si può usare in ambienti di produzione, ergo se vuoi vendere software.

Pixel452
16-03-2010, 22:33
Se non erro Visual Studio Express non si può usare in ambienti di produzione, ergo se vuoi vendere software.

Ah... non lo sapevo. Potrebbe sempre usare un altro IDE o magari hanno già delle licenze, da quello che ha detto sarà un progetto che coinvolgerà più persone e durerà 14 mesi, senza contare che le tecnologie citate da lui sono tutte MS, sono portato a pensare che queste storie di licenza nel suo caso non siano un problema.

zakmckraken
17-03-2010, 10:41
Ciao!
Per la mia esperienza ti consiglio esclusivamente C#, come ambiente di sviluppo va piu'che bene MonoDevelop (lo uso per sviluppare sia in Asp.Net sia in WinForms sotto Linux e Windows senza differenze apprezzabili). Perche'dico questo?
Con MFC fare cose veramente dinamiche e'volersi fare male, non e'fatto per essere totalmente dinamico, vedi il sistema per associare i gestori degli eventi.
Non conosco QT (e vorrei approfondirlo quindi ogni info e'ben accetta!) ma immagino (e ripeto immagino) che essendo C++ abbia gli stessi problemi di MFC riguardo all'associare eventi ai controlli..
WinForms con C# ha il pregio di poter gestire in maniera programmatica l'associazione di eventi e la costruzione dei vari oggetti senza troppi problemi. Avevo in effetti messo su un progetto ormai ben consolidato proprio con questo approccio, (per la cronaca se qualcuno fosse interessato http://www.ceframework.com)
Zak

cionci
17-03-2010, 11:01
Non conosco QT (e vorrei approfondirlo quindi ogni info e'ben accetta!) ma immagino (e ripeto immagino) che essendo C++ abbia gli stessi problemi di MFC riguardo all'associare eventi ai controlli..
Fortunatamente no. Il sistema di funzionamento si basa su signal e slot. Il signal è un evento, lo slot invece esegue una funzione sul controllo. E' possibile collegare graficamente i signal agli slot, sempre che siano compatibili ;)
E' comunque possibile implementare i propri signal ed i propri slot.
http://doc.trolltech.com/4.6/signalsandslots.html

Inoltre il meccanismo per cambiare dinamicamente l'aspetto dei controlli è molto più semplice rispetto a quello di MFC (maledetti messaggi). Se invece si vuole cambiare l'aspetto staticamente è possibile farlo tramite semplici fogli di stile, in modo simile a CSS.

zakmckraken
17-03-2010, 11:27
Thkx!
Quindi vuoi dire che puoi arbitrariamente fare una cosa tipo (pseudocodice misto java c# etc....)

class Form{
void myFunction(WidgetClass widget ){
widget.addEventHandler(ON_CLICK,myHandler);
}

void myHandler(){
//Do something
}
}

In modo da poter associare all'evento ON_CLICK l'esecuzione del metodo myHandler? Un po come faresti con php/java/c#/(linguaggio != C/C++)
(Ammetto che spero che la risposta sia "si" e a sto punto provo davvero le QT!!!)
Leggendo la pagina relativa mi sembra che sia qualcosa del genere, sfruttando il preprocessore per "ricostruire" le chiamate a funzione...

||ElChE||88
17-03-2010, 11:36
Thkx!
Quindi vuoi dire che puoi arbitrariamente fare una cosa tipo (pseudocodice misto java c# etc....)

class Form{
void myFunction(WidgetClass widget ){
widget.addEventHandler(ON_CLICK,myHandler);
}

void myHandler(){
//Do something
}
}

In modo da poter associare all'evento ON_CLICK l'esecuzione del metodo myHandler? Un po come faresti con php/java/c#/(linguaggio != C/C++)
(Ammetto che spero che la risposta sia "si" e a sto punto provo davvero le QT!!!)
Si.

class Form : QWidget
{
Q_OBJECT
public:
void myFunction(QPushButton *button)
{
connect(button, SIGNAL(clicked()), this, SLOT(myHandler()));
}

private slots:
void myHandler()
{
//Do something
}
};

zakmckraken
17-03-2010, 12:52
A questo punto mi arrendo alla potenza di QT!!!! :)

Johnn
17-03-2010, 19:12
Ciao a tutti,

sto lavorando ad un progetto per il quale ho difficolta' a capire che linguaggio e framework utilizzare.

CUT


Prova a dare un'occhiata a Eclipse RCP.
http://www.eclipse.org/home/categories/rcp.php

E' una strada probabilmente diversa da quanto è già stato consigliato, ma per la mia piccola esperienza è stata più che positiva.
Direi che si programma ad un livello più alto di astrazione rispetto a quanto già detto, anche se non ho esperienza diretta. Ciò mi ha permesso, senza esperienze precedenti, di realizzare una UI di tutto rispetto comparabile a quella di Eclipse stesso (perché si sfruttano componenti, i plugin, già preconfezionati, ma comunque personalizzabili a piacimento) rapidamente e in maniera pulita. Per esempio, se si deve realizzare un'area che funge da editor di testo, già ci sono tutti gli elementi a disposizione per il taglia, copia, incolla, sintax highlighting (!), ecc. Quindi penso sia una soluzione che venga incontro all'esigenza di essere rapidi nello sviluppo e nello stesso tempo di scrivere codice manutenibile. Poi sono quasi del tutto certo che potete usare tutto liberamente.

peng
22-03-2010, 08:08
rapidamente e in maniera pulita. Per esempio, se si deve realizzare un'area che funge da editor di testo, già ci sono tutti gli elementi a disposizione per il taglia, copia, incolla, sintax highlighting (!), ecc. Quindi penso sia una soluzione che venga incontro all'esigenza di essere rapidi nello sviluppo e nello stesso tempo di scrivere codice manutenibile. Poi sono quasi del tutto certo che potete usare tutto liberamente.


Anche MFC ha una funzionalita' simile, si puo' fare un editor di testo con tale funzioni (a parte il syntax highligting) in pochi minuti..

che linguaggio hai utilizzato? C++ .NET?

peng
22-03-2010, 08:09
Se non erro Visual Studio Express non si può usare in ambienti di produzione, ergo se vuoi vendere software.


Si infatti, noi abbiamo Visual Studio 2008 professional. La licenza ci permette di redistribuire le applicazioni.. Visual Studio Express ha inoltre alcune funzionalita' in meno rispetto a VS ..

peng
22-03-2010, 08:13
Ciao!
Per la mia esperienza ti consiglio esclusivamente C#, ..Zak

Grazie, apprezzo il contributo. Oggi e' giornata di decisione. Io e l'altro collega siamo fortemente propensi per C++/C# .NET. Vedremo se riusciremo a convincere il nostro Project Manager :-)

Pixel452
22-03-2010, 08:20
Quindi siete indecisi tra Qt e WPF?
Credo siano le piattaforme più papabili per i linguaggi scelti. Facci sapere.

Se posso... non avete pensato a fare un paio di giorni di prova con entrambe le soluzioni? Almeno vi fate un idea parziale.

peng
22-03-2010, 08:21
Se il target è solo Windows ti consiglio WPF, si programma in C# e fa parte del Framework .NET. E’ abbastanza diverso da programmare rispetto alle MFC ed introduce molti concetti nuovi rispetto alle precedenti librerie Microsoft, quindi prevedi un primo periodo di “ambientamento”. I grafici dovrebbero esserci ma sono assembly inclusi in Expression Blend, noi in ditta usiamo le librerie della Syncfusion che però sono a pagamento. Googlando dovresti trovarne anche di gratuite.

Qui puoi trovare Blend, un potentissimo strumento per la creazione delle UI
http://www.microsoft.com/expression/

Nel mio team v'e' un senior programmer con una considerevole esperienza in .NET usando WinForms. Non ha molta esperienza usando WPF.

Non mi sono ben chiari i vantaggi di WPF rispetto a WinForms.

Vi sono vantaggi evidenti oppure entrambe le scelte sono piu' o meno equiparabili e preferibili a MFC?

Inoltre, questa domanda e' estesa a tutti, la mia impressione e' che usando MFC puoi ottenere effetti migliori nell'aspetto della tua applicazione. Ad esempio ho installato un FEATURE PACK per VS 2008 ed ora posso un sacco di layout (Office 2007, Visual Studio etc..). Inoltre v'e' il supporto dei Ribbon. La cosa che comunque era presente anche prima e' il fatto che usando il Wizard posso creare gia' un applicazione "dockable" e con un'aspetto professionale. Vi risulta che sia possibile fare lo stesso anche con .NET?

MarcoGG
22-03-2010, 08:31
Se non erro Visual Studio Express non si può usare in ambienti di produzione, ergo se vuoi vendere software.

Erri. MS dice che si può usare eccome :
http://www.microsoft.com/express/support/support-faq.aspx

peng
22-03-2010, 08:32
Quindi siete indecisi tra Qt e WPF?
Credo siano le piattaforme più papabili per i linguaggi scelti. Facci sapere.



Non conosco Qt purtroppo, ma ora mi sto informando un po' meglio su di esso.


Se posso... non avete pensato a fare un paio di giorni di prova con entrambe le soluzioni? Almeno vi fate un idea parziale.


Credo di si.. questo weekend abbiamo provato MFC. Stamane abbiamo un meeting e credo che la scelta piu' sensata sia provare ora C# .NET usando WinForms. Purtroppo dobbiamo anche considerare il capitale di esperienza che abbiamo nel team e questo e' MFC e C# .NET usando WinForms.

Dobbiamo fare una prima release tra 3 mesi, quindi abbiamo i tempi piuttosto stretti e la scelta diviene un po' piu' rigida..

stiamo a vedere cosa salta fuori.. sia io che l'altro mio collega non conosciamo WPF, quindi la tendenza sarebbe usare WForms dato che dobbiamo garantire un risultato tra 3 mesi e l'applicazione e' molto ma molto complessa..

WarDuck
22-03-2010, 08:32
Ci dovrebbero essere dei porting in .NET per quei componenti... in effetti non ho capito se saranno integrati nella versione finale di .NET 4.0.

Pixel452
22-03-2010, 08:40
Premetto che le nuove MFC non le ho provate, ho solo visto che è presente un interfaccia in stile Ribbon, non so se c'è già anche in WPF.

WPF è una libreria in C# basata su rendering tramite DirectX, quindi completamente vettoriale ed accelerata, utilizza un metodo dichiarativo basato su xaml per definire l’interfaccia (che cmq può essere creata anche via C#) questo permette di slegare la logica del programma dall’UI. L’Interfaccia è totalmente basata su stili e template questo ti permette di modificarla in modo molto comodo e veloce ma soprattutto potente, il sistema di animazioni è molto avanzato e perfettamente integrato. Per farti un esempio un po’ estremo rifare lo stile dei classici bottoni per farli apparire come un cubo rotante riflesso con dentro un video non è niente di che, prova a pensare di farlo in un'altra libreria.

Due link tanto per farti vedere dove puoi arrivare con WPF.

http://www.youtube.com/watch?v=OJgHMA2uJO0
http://www.youtube.com/watch?v=GzrAS9SGj2k

Ovviamente per usarlo bene devi essere bravo ed avere esperienza, ci sono molti concetti nuovi per un programmatore che viene dalle WinForm 2.0 e all’inizio non sarà facile, dipende voi che esigenze avete e quanto tempo avete per impararlo come si deve. Se vi bastano le WinForm e le sapete già usare potete anche continuare su quella strada, dipende sempre dal rapporto costi/risultato

zakmckraken
22-03-2010, 08:42
Inoltre, questa domanda e' estesa a tutti, la mia impressione e' che usando MFC puoi ottenere effetti migliori nell'aspetto della tua applicazione. Ad esempio ho installato un FEATURE PACK per VS 2008 ed ora posso un sacco di layout (Office 2007, Visual Studio etc..). Inoltre v'e' il supporto dei Ribbon. La cosa che comunque era presente anche prima e' il fatto che usando il Wizard posso creare gia' un applicazione "dockable" e con un'aspetto professionale. Vi risulta che sia possibile fare lo stesso anche con .NET?
Occhio a MFC come dicevo se stai facendo qualcosa di dinamico rischi di scontrarti con un delirio totale (MFC e fatta bene...se la usi come ms vuole, ovvero con risorse e form fissi...) se vuoi cose dinamiche meglio .NET o, visti i post precedenti ma non per esperienza personale, QT.
Ci sono anche parecchie estensioni a pagamento per .NET e MFC (v.componentart, o profui) per usare widgets "fighi" ma attenzione a fare prima una sorta di programma di prova con le funzionalita'che non sono esplicitamente fornite dai toolkit perche potrebbe essere un salto nel buio (ne so qualcosa :muro: )


WPF è una libreria in C# basata su rendering tramite DirectX, quindi ...
Ma non ha delle funzionalita'ridotte rispetto a WinForms? O sono io che ho capito male?? (non mi sono informato con "estrema" attenzione ma mi era parso) .. giusto per avere anche io qualche delucidazione

Pixel452
22-03-2010, 09:13
Ma non ha delle funzionalita'ridotte rispetto a WinForms? O sono io che ho capito male?? (non mi sono informato con "estrema" attenzione ma mi era parso) .. giusto per avere anche io qualche delucidazione

Si, ha dei controlli in meno, non capisco neanche io perchè alla MS non li abbiano integrati, per assurdo mancano anche i calendar che sono stati inclusi solo di recente in Blend 3(quindi devi installarlo ed usare gli assemly che ti aggiunge per averli).

Peng faresti bene a controllare che tra WPF e Blend ci siano tutte le cose che ti servono, perchè effetivamente della roba manca, magari la trovi gratuita su internet ma non è il massimo se hai delle scadenze e sei alle prime armi con la libreria.

||ElChE||88
22-03-2010, 09:37
Fossi in voi lascerei stare WPF, visto che avete poco tempo e soprattutto poca esperienza in WPF.
Se c'è una cosa da evitare, è usare WPF come se fosse WinForms 3.0: il risultato sarà inevitabilmente una porcheria.
Si, ha dei controlli in meno, non capisco neanche io perchè alla MS non li abbiano integrati, per assurdo mancano anche i calendar che sono stati inclusi solo di recente in Blend 3(quindi devi installarlo ed usare gli assemly che ti aggiunge per averli).
I calendar (e non solo) sono stati aggiunti alla release 4.0 di WPF, e quindi sono disponibili anche con Visual Studio 2010.

Pixel452
22-03-2010, 09:40
Si, lo sapevo, ma se non sbaglio non c'è ancora stato un rilascio definitivo.

||ElChE||88
22-03-2010, 09:51
Si, lo sapevo, ma se non sbaglio non c'è ancora stato un rilascio definitivo.
Esatto, attualmente sono alla Release Candidate.

cionci
22-03-2010, 09:56
Inoltre, questa domanda e' estesa a tutti, la mia impressione e' che usando MFC puoi ottenere effetti migliori nell'aspetto della tua applicazione. Ad esempio ho installato un FEATURE PACK per VS 2008 ed ora posso un sacco di layout (Office 2007, Visual Studio etc..). Inoltre v'e' il supporto dei Ribbon. La cosa che comunque era presente anche prima e' il fatto che usando il Wizard posso creare gia' un applicazione "dockable" e con un'aspetto professionale. Vi risulta che sia possibile fare lo stesso anche con .NET?
Le interfacce Ribbon le puoi fare con WPF.
Con le Qt non le puoi fare, ma ci sono altri componenti aggiuntivi per ottenere interfacce simili.
Qualsiasi cosa, ma evita MFC come la pesta. Ti do un compitino da fare con MFC: cambiare il background di una edit box.
Qui c'è la soluzione: http://www.codeguru.com/cpp/controls/editctrl/backgroundcolor/article.php/c3929

peng
22-03-2010, 12:32
...sono di ritorno dal meeting con il nostro project manager e sembra che lo abbiamo convinto ad utilizzare C# .NET.. dobbiamo pero' fare una prova sulle performance.

Infatti il nostro sw avra' una considerevole quantita' di funzioni matematiche. Stiamo simulando un prodotto industriale ingegneristico per il quale utilizziamo equazioni termodinamiche.

Ora stiamo implementando un test case in entrambi i linguaggi per fare un po' di benchmarking.. un altro fattore da considerare e' che la ns applicazione e' poi distribuita utilizzando CITRIX probabilmente..


c'e' qualcuno di voi che ha gia' fatto performance test simili (matematica complessa)?

Grazie mille

cionci
22-03-2010, 12:35
Se hai problemi di performance, niente ti vieta di implementare i calcoli matematici tramite un DLL esterna fatta in un linguaggio di più basso livello.

peng
22-03-2010, 13:42
Se hai problemi di performance, niente ti vieta di implementare i calcoli matematici tramite un DLL esterna fatta in un linguaggio di più basso livello.

Era quello che pensavamo anche noi.. sarebbe la soluzione ideale cosi si unisce performance a velocita' di sviluppo.

Vediamo un po' come procedono le cose..

Grazie per le dritte,

Rimangono benvenuti eventuali test di performance :-)

...un altro argomento a favore di .NET e' che molti giochi per XBOX iniziano ora ad essere sviluppati in .NET, il che dovrebbe essere un indicatore positivo. Probabilmente Microsoft sta ottimizzando il linguaggio parecchio :-)

peng
22-03-2010, 14:00
Le interfacce Ribbon le puoi fare con WPF.
Con le Qt non le puoi fare, ma ci sono altri componenti aggiuntivi per ottenere interfacce simili.
Qualsiasi cosa, ma evita MFC come la pesta. Ti do un compitino da fare con MFC: cambiare il background di una edit box.
Qui c'è la soluzione: http://www.codeguru.com/cpp/controls/editctrl/backgroundcolor/article.php/c3929

Ottimo, grazie della dritta.. :-)..

altri fattori in favore a .NET e contro MFC sono:



1 - usando ad esempio C# la sintassi e' + intuitiva quindi + adatta a programmatore meno esperti. Nel nostro caso abbiamo un contratto a progetto di 14 mesi e quindi una volta lasciata la compagnia sara' per loro + facile modificare il software. Si noti che nel nostro team siamo 2 informatici e 2 ingegneri (quest'ultimi impareranno da noi le basi della programmazione e imparare MFC sarebbe + tedioso).


2 - una volta terminato il contratto saro' nel mercato del lavoro e v'e' molta + domanda per programmatori .NET

3 - il mio collega ha anni di esperienza in .NET e 0 in MFC

4 - abbiamo tempi di sviluppo stretti

5 - testare in MFC (tenendo conto dei puntatori e balle varie) farebbe perdere + tempo rispetto a .NET e C#, e dato che il progetto prevede 6 release in 14 mesi la cosa suona tediosa in MFC..



Grazie Cionci!

peng
22-03-2010, 14:03
Premetto che le nuove MFC non le ho provate, ho solo visto che è presente un interfaccia in stile Ribbon, non so se c'è già anche in WPF.

WPF è una libreria in C# basata su rendering tramite DirectX, quindi completamente vettoriale ed accelerata, utilizza un metodo dichiarativo basato su xaml per definire l’interfaccia (che cmq può essere creata anche via C#) questo permette di slegare la logica del programma dall’UI. L’Interfaccia è totalmente basata su stili e template questo ti permette di modificarla in modo molto comodo e veloce ma soprattutto potente, il sistema di animazioni è molto avanzato e perfettamente integrato. Per farti un esempio un po’ estremo rifare lo stile dei classici bottoni per farli apparire come un cubo rotante riflesso con dentro un video non è niente di che, prova a pensare di farlo in un'altra libreria.

Due link tanto per farti vedere dove puoi arrivare con WPF.

http://www.youtube.com/watch?v=OJgHMA2uJO0
http://www.youtube.com/watch?v=GzrAS9SGj2k

Ovviamente per usarlo bene devi essere bravo ed avere esperienza, ci sono molti concetti nuovi per un programmatore che viene dalle WinForm 2.0 e all’inizio non sarà facile, dipende voi che esigenze avete e quanto tempo avete per impararlo come si deve. Se vi bastano le WinForm e le sapete già usare potete anche continuare su quella strada, dipende sempre dal rapporto costi/risultato


Grazie delle dritte,
WPF suona fantastico ma forse e' vero che non sarebbe saggio fare un salto nel buio se il mio collega conosce bene WinForms.. io non conosco ne' una ne' l'altra quindi credo sia + sicuro affidarsi a WinForms e al mio collega visti i tempi stretti..

Grazie a tutti voi, e' davvero utile sentire i vostri pareri ;)

Johnn
22-03-2010, 18:52
Anche MFC ha una funzionalita' simile, si puo' fare un editor di testo con tale funzioni (a parte il syntax highligting) in pochi minuti..

che linguaggio hai utilizzato? C++ .NET?

No, Java e un po' di xml tramite editor visuale (per aggiungere vici al menù, per esempio), quindi potresti anche non sapere niente di xml. (Infatti nell'ormai poco probabile caso che scegli questa strada puoi far fare i menù e le icone ai due ingegneri... :asd: ).

Ovviamente cambia in base alle specifiche, ma io ho scritto davvero poco codice in rapporto al risultato. Purtroppo non conosco MFC per fare un confronto sia in termini di fuzionalità, sia in termini di produttività.

cionci
22-03-2010, 18:56
Con le QT: http://qt.nokia.com/doc/4.6/richtext-syntaxhighlighter.html

Johnn
22-03-2010, 22:00
Qui c'è un tutorial che fa una panoramica (trovato googlando):

http://www.vogella.de/articles/RichClientPlatform/article.html

peng
23-03-2010, 13:54
Con le QT: http://qt.nokia.com/doc/4.6/richtext-syntaxhighlighter.html

Ciao,
stiamo pensando di lasciare stare MFC e Qt in quanto richiedono di essere programmatori esperti. E' infatti facile confondersi con i puntatori e dato che scriveremo molte righe di codice e molte funzioni matematiche, la probabilita' di inserire bug di questo tipo e' altissima.

Inoltre una volta che io e l'altro informatico c'e' ne andremo (tra 13 mesi), i due ingegnieri dovranno mantenere il codice... :confused: :D :read: :muro:

entrambi non ci capiscono molto di OO programming e non faranno corsi a riguardo piu' linghi di tre giorni..

C# sembra essere la soluzione ideale in quanto, come Java, considera tutto come un puntatore e quindi il programmatore di non si deve preoccupare di pass by value, pass by reference etc..

Oltre al fatto che C# supporta gia' il Garbage collector (che tra l'altro verra' inserito nello standard C++ nel futuro prossimo venturo se non erro).

E' vero che e' possibile farlo anche con Managed C++ e usare .NEt, ma il secondo vantaggio di C# (e Java) nel nostro contesto e' che non hai i file header il che implica che c'e' meno codice ca mantenere..

i file header sono fighi come concetto, ma lo sappiamo bene che quando scrivi codice ti capita al 99% di doverli modificare almeno una volta nella tua classe in quanto e' impossibile iniziare con la soluzione ottima..

Ora stiamo effettuando un po' di performance test C# vs C++..

l'unica cosa negativa di C# fino ad ora, contradditemi se mi sbaglio, e' che usando MFC + visual studio 08 si puo' creare un progetto usando il wizard ed avere gli elementi dockable.. in C# non sappiamo ancora come fare (devo ancora googlare approfinditamente)..

ci stanno venendo anche delle idea matte, visto che il sw gestira' diversi prodotti e tipi di utenti dovremo modificare dinamicamente l'interfaccia grafica.
Si discuteva di fare un meta linguaggio interno che descriva la configurazione del progetto e cercare di generare automaticamente parte dell'interfaccia grafica.. stiamo a vedere.. e' un po' un casino (troppo lungo) da spiegare. La cosa non e' cosi matto come sembra :-).. stiamo a vedere...

peng
23-03-2010, 14:16
No, Java e un po' di xml tramite editor visuale (per aggiungere vici al menù, per esempio), quindi potresti anche non sapere niente di xml. (Infatti nell'ormai poco probabile caso che scegli questa strada puoi far fare i menù e le icone ai due ingegneri... :asd: ).

Ovviamente cambia in base alle specifiche, ma io ho scritto davvero poco codice in rapporto al risultato. Purtroppo non conosco MFC per fare un confronto sia in termini di fuzionalità, sia in termini di produttività.

con MFC hai anche un visual editor, simile a quello di Java e C#. Quando apri il progetto in visual studio clicchi sul file .rc e passi alla sezione dove puoi modificarlo... similmente pui aggiungere bottoni, label e tutte le varie componenti grafiche. Aggiungere controlli ed event handler, e usare funzioni di libreria come il copia e incolla e forse anche il syntax highliter (in un minuto riesci a creare una versione base dell'applicazione blocco note).

MFC e' figo perche' ti da gratis un sacco di funzionailita':

serializzazione, dockable panels, mail del document corrrente, costumizzazione di stili dell'applicazione (l'utente puo' scegliere lo stile a run time, es. passi da Office 2007 blue style a Outlook style etc..)... mi sfuggono un paio di altre cose.. ah si, Ribbons

credo che con .NET e C# net non hai tutte queste funzionalita' gratis (perlomeno quelle riguardo Ribbons e dockable panels)..

qualcuno mi potrebbe contraddire? :)

Pixel452
23-03-2010, 15:16
Non l’ho citato prima perché non è esattamente comodo come può essere su MFC ma su WPF c’è un pannello che si chiama DockPanel che permette di disporre gli elementi “Dockandoli”. Il limite è che non offre il trascinamento degli elementi(intendo il poter riposizionare col mouse i vari pannelli in realtime), questo lo dovreste implementare voi.
Si discuteva di fare un meta linguaggio interno che descriva la configurazione del progetto e cercare di generare automaticamente parte dell'interfaccia grafica..
In WPF puoi facilmente farlo caricando un file xaml esterno a runtime, senza stare ad inventarti linguaggi proprietari o cose strane che probabilmente sarebbero piene di bug.

In questo video c’è un programma scritto in WPF che tra le altre cose cambia gli stili dell’applicazione in tempo reale, in effetti non è niente di che, si può completamente stravolgere l’applicazione, qui praticamente cambia solo i colori. Nota che come dice nel video cambiando solo i temi si può includere il supporto al multitouch, tanto per darti un idea.

http://www.youtube.com/watch?v=CZQK-B9bTnI

cionci
23-03-2010, 16:35
C# e .Net offrono sicuramente barre dockable: http://www.codeguru.com/csharp/csharp/cs_syntax/componentdevelopment/article.php/c14179
Il tempo che guadagni con MFC nel disegno dell'interfaccia lo perdi nello scrivere il codice per gestire l'interfaccia.
Per Ribbon con WinForms: http://www.codeproject.com/KB/shell/windowsribbon01.aspx
Sono una marea di parti: http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=172641

Pixel452
23-03-2010, 17:11
Ma siamo sicuri che WinForm sia sufficiente per il livello di dinamicità che gli serve? Non vorrei che a metà progetto si trovasse in qualche brutta situazione e dovesse perdere una marea di tempo per fare cose che con altre librerie sarebbero banali. La questione sul caricamento dinamico dell'interfaccia tramite linguaggio interno mi sembra propendere per una situazione estrema

tomminno
23-03-2010, 19:31
Ma siamo sicuri che WinForm sia sufficiente per il livello di dinamicità che gli serve? Non vorrei che a metà progetto si trovasse in qualche brutta situazione e dovesse perdere una marea di tempo per fare cose che con altre librerie sarebbero banali. La questione sul caricamento dinamico dell'interfaccia tramite linguaggio interno mi sembra propendere per una situazione estrema

Il problema delle WinForm in questo caso è la totale mancanza di layout manager (entità molto misteriose per gli ideatori di tutte le GUI Microsoft) che si sono decisi ad introdurre solo con WPF.

zakmckraken
24-03-2010, 07:16
...e in ogni caso MFC e dinamico sono 2 cose non banali da mescolare...a meno di non conoscere molto bene i sorgenti di MFC e sapere come "fregare" l'implementazione standard...per non parlare dell'ipotesi folle di creare toolbars dinamiche (ovvero creare e distruggere toolbars a piacimento) modificare i comportamenti del docking dei componenti (il meccanismo di piazzamento degli elementi nelle dockbars e un po'anti intuitivo), se poi vuoi fare finestre splittate o dialog con contenuto dinamico...
Ho fatto tutto questo, pero'ho avuto quasi un anno a disposizione, e conoscevo gia bene l'MFC standard.
Tolto questo per cose normali adoro MFC che trovo tutto sommato piacevole da programmare (e ad aprile provero'QT...vedremo che accade :P )

peng
24-03-2010, 08:25
....per non parlare dell'ipotesi folle di creare toolbars dinamiche (ovvero creare e distruggere toolbars a piacimento) modificare i comportamenti del docking dei componenti (il meccanismo di piazzamento degli elementi nelle dockbars e un po'anti intuitivo), se poi vuoi fare finestre splittate o dialog con contenuto dinamico...

..non mi sognerei mai di farlo in C#, era un'idea, folle appunto, che era venuta al mio collega ieri, ma la si farebbe solamente in C#. Comunque siamo consapevoli sia una follia e non credo proprio procederemo per questa..

WPF e' una tentazione, ma credo sia piu' sicuro WinForms in quanto posso affidarmi all'esperienza del collega..

peng
24-03-2010, 08:25
C# e .Net offrono sicuramente barre dockable: http://www.codeguru.com/csharp/csharp/cs_syntax/componentdevelopment/article.php/c14179
Il tempo che guadagni con MFC nel disegno dell'interfaccia lo perdi nello scrivere il codice per gestire l'interfaccia.
Per Ribbon con WinForms: http://www.codeproject.com/KB/shell/windowsribbon01.aspx
Sono una marea di parti: http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=172641


Grazie, ora provo a seguire quanto scritto in questi blog..

peng
24-03-2010, 08:27
Ma siamo sicuri che WinForm sia sufficiente per il livello di dinamicità che gli serve? Non vorrei che a metà progetto si trovasse in qualche brutta situazione e dovesse perdere una marea di tempo per fare cose che con altre librerie sarebbero banali. La questione sul caricamento dinamico dell'interfaccia tramite linguaggio interno mi sembra propendere per una situazione estrema

Credo che WinForms sia un buon compromesso.. la questione del caricamento dinamico credo proprio la lasceremo stare :-)

peng
25-03-2010, 14:06
Credo che WinForms sia un buon compromesso.. la questione del caricamento dinamico credo proprio la lasceremo stare :-)

C++.. dopo accurate performance analysis abbiamo deciso di abbondonare l'idea di C# :-).. il nostro software richiede intensi calcoli e non vogliamo dare ai nostri clienti un prodotto che runna + lentemente rispetto a quello dei nostri competitori..

Pixel452
25-03-2010, 14:15
Ma non potete fare l'interfaccia in C# ed i calcoli in C++? Alla fine si tratta solo di una chiamata ad una dll esterna scritta in C++, l'integrazione è abbastanza buona, potete tenere tutti i tipi di progetti sotto un unica solution. Io ho optato per questa strada per un programma a babbo morto e non mi sembra malaccio. Certo la vostra situazione è un pò diversa...

Quindi adesso userete MFC? Quelle librerie andrebbero dimenticate! Visto che il tuo collega conosceva le WinForms con le MFC siete da capo, a questo punto io voto Qt.

cionci
25-03-2010, 17:00
Quindi adesso userete MFC? Quelle librerie andrebbero dimenticate! Visto che il tuo collega conosceva le WinForms con le MFC siete da capo, a questo punto io voto Qt.
Quotone !!! Anche fare la parte di interfaccia in C# e quella di calcolo in C++ è un'ottima idea.
Per Qt il tempo di apprendimento e il tempo di sviluppo sono nettamente inferiori a quelli di MFC.
Certo devi fare un po' di rinunce, come ad esempio l'interfaccia ribbon, ma volendo si possono comunque ottenere interfacce simili: http://qiacat.blogspot.com/2009/04/ribbon-ui-korat-ui.html
Qui ci sono alcuni esempi di cosa si può ottenere con le Qt: http://doc.trolltech.com/4.6/examples.html

peng
26-03-2010, 08:51
qt lo abbiamo escluso sebbene il mio collega vi ha lavorato per 1 anno. Faccio parte di una multinazionale e una sede con cui collaboraiamo strettamente ha sviluppato un software complesso in MFC, quindi la nostra curva di apprendimento e la nostra sinergia con loro sono in favore.

La libreria non va dimenticata secondo me. .NET e MFC sono due concetti diversi.

Pixel452
26-03-2010, 08:59
A me MFC fa venire i brividi, cmq il tutto IMHO. Direi che a questo punto la vostra scelta l'avete fatta. Buon lavoro!

peng
26-03-2010, 09:23
..si. Abbiamo considerato tutte le alternative possibili:

1 - abbiamo escluso la possibilita' di usare un approccio misto (.dll C++ in codice C#). Il motivo e' che il core del nostro software sono le classi matematiche che verranno sviluppate in puro C++.

Assumendo che queste quindi non vengano scritte in C# la parte restante sarebbe l'interfaccia grafica.

In C#, come si diceva, si possono fare cose fighe come Ribbon e dockable panels e certo e' + veloce da programmare (stiamo facendo i nostri conceptual mock-ups dell'interfaccia grafica usando appunto C#).

Ma in 14 mesi di progetto la proporzione di tempo dedicata all'interfaccia grafica e' relativa.

Riguardo l'apprendimento non sara' un problema, abbiamo fatto un corso la settimana scorsa e ne faremo uno tra due settimane. Ora ci stiamo focalizzando sulle altre fasi tra cui la non banale specifica dei requisiti e use case. Tralascio dettagli ma il software ha degli use case non banali.

Stiamo a vedere .. alla fine cmq abbiamo parlato tanto di MFC.. ma il'60/70% del codice sara' puro C++. il rimanente C++ con MFC..

grazie a tutti!

cionci
26-03-2010, 09:53
A me MFC fa venire i brividi, cmq il tutto IMHO. Direi che a questo punto la vostra scelta l'avete fatta. Buon lavoro!
Anche io rabbrividisco...pensando poi che ci ho lavorato per diversi anni :cry: