Newsgroup: it.comp.programmare.win32
Titolo: MFC: Bello o Brutto?

Sono quello che tanta voglia di fare robe con Vc++ e ora che mi sono
arrivati i tanto agognati libri, scopro dopo averne letto uno nel tempo
record di 3 ore, che sebbene il titolo sia "Visual C++ 6 Facile", non viene
spesa nemmeno una parola su come creare un'applicazione al di fuori di
qualche cenno sui database,dilungandosi invece su problemi di
sintassi,puntatori e funzioni (peraltro utili).Il secondo, che ho da poco
cominciato, effettua un approccio in "24 lezioni da un'ora" al VC++,
decisamente più sbrigativo e pratico, e dopo 4 ore di lezioni prevede già la
creazione e la gestione di un'applicazione con MFC, fino alla creazione di
Controlli ActiveX verso la fine.
Ora la mia domanda è questa:
E' sensato apprendere a scrivere programmi in MFC o andando avanti dovrò per
forza tornare a scrivere tonnellate di codice (qualora volessi utilizzare ad
esempio DirectX o OpenGL). In pratica: con MFC posso gestire un qualunque
tipo di applicazione?
Ogni tipo di risposta/suggerimento/quant'altro è ben accetto e gradito.
Grazie pow(10,3)  (prima la base o l'esponente..?)
Andrea

 tipo di applicazione?
Si, noi in ditta sviluppiamo un sistema editoriale intero, con 
applicazioni MFC. Ovviamente per le cose "complicate" MFC non basta, ma 
semplifica molto le cose "ripetitive". 
-- 
Luc

 ha scritto nel messaggio
news:mbZmd.184911$b5.92...@news3.tin.it...


 Grazie pow(10,3)  (prima la base o l'esponente..?)
Hmm... giacche' si tratta di valori interi, ti consiglierei di non usare 
la pow(), che va bene per numeri in virgola mobile, ma e' "sprecata" per 
semplici potenze intere ;)
Ciao,
Dan


Caspita ero di sicuro di aver scritto pow(10+epsilon,3).
Evidentemente ho qualche problema a gestire gli infinitesimi.
Au revoir e grazie!
Andrea

 semplici potenze intere ;)
Questo mi incuriosisce. Quindi, per non sprecare, cosa ci 
consigli al posto di pow(10, 3)?
Paolo. 

 consigli al posto di pow(10, 3)?
Beh, cosi` velocemente su 2 piedi direi una cosa tipo:
int powInt( int iBase, int iPower )
{
    int iRes = iBase;
    while( --iPower )
        iRes *= iBase;
    return iRes;
}
questo funziona solo se la potenza e` maggiore di zero... (occhio non l'ho
provata)
comunque il concetto e` che sei fai delle preve vedrai che a livello di
performance spinte conviene farsela...

 performance spinte conviene farsela...
[rewind]
se fai delle prove spinte puoi osservare che a livello di performance
conviene farsela...

 sviluppo ad essi connesse
Secondo me sei incapace ad usarle... Ti suggerisco di continuare con 
Java quindi... :-PPPPP 
-- 
Luc

 Java quindi... :-PPPPP
Beh non esageriamo... conosco diversa gente che sviluppa applicazioni
windows in C++; alcuni amano MFC alla follia, altri le odiano profondamente
ed invece amano ATL/STL ... ognuno ha le sue preferenze :-D
Ciao
-- 
* ObiWan
Microsoft MVP: Windows Server - Networking
http://www.microsoft.com/communities/MVP/MVP.mspx
http://mvp.support.microsoft.com
DNS "fail-safe" for Windows clients.
http://ntcanuck.com
408+ XP/2000 tweaks and tips
http://ntcanuck.com/tq/Tip_Quarry.htm

Ho avuto la sfortuna di usare le MFC per sviluppare un paio di 
applicazioni abbastanza semplice un paio d'anni or sono e sono stato 
stupito da quanto schifo facciano quelle librerie e gli strumenti di 
sviluppo ad essi connesse.
Poco fa ho avuto modo, invece, di scrivere un programmino in java + SWT: 
tutta un'altra storia. La produttivita' aumenta in modo incredibile e la 
pulizia del codice e' infinitamente migliore, senza contare il vantaggio 
di scrivere programmi ragionevolmente cross-platform.

 se scrivi applicazioni scientifiche).
<snip>
Concordo al 100% anzi... visto che ci siamo, il "core" potrebbe
essere rappresentato da DLL esterne (standard o COM) il che
renderebbe il tutto estremamente modulare e riutilizzabile (posto
che i vari moduli siano correttamente "ingegnerizzati") inoltre
usare un'approccio basato su DLL permetterebbe anche di
poter riscrivere alcune parti del "core" in altri linguaggi se ciò
fosse necessario (es. riscrivere in ASM "puro" alcune funzioni
critiche che necessitino del massimo della velocità)


 di scrivere programmi ragionevolmente cross-platform.
Senza contare la incredibile inefficienza di Java+SWT rispetto a C++ + 
MFC (sul mio vecchio Pentium 150 MHz 32MB RAM le applicazioni C++ MFC 
vanno alla grande, quelle in Java anche in console ci mettono un sacco 
anche solo a compilare :-))
...e senza contare che con MFC hai pieno accesso alle funzionalita' 
piu' avanzate di Windows (Win32 SDK, COM, DirectX, etc. etc. etc.) 
invece con Java ti scordi tutto cio'!
Non sono un dipendente di Microsoft :) ma mi sento di difendere le MFC 
che hanno davvero tanti vantaggi (poi, non sono perfette, e chi lo nega; 
ma certo tutti i vantaggi che offrono impongono di non poterle definire 
in maniera cosi' negativa come fatto dell'OP!)
Ciao,
Dan

 ed invece amano ATL/STL ... ognuno ha le sue preferenze :-D
...Forse volevi dire "WTL" al posto di "STL"?
Cmq, concordo che i gusti sono un qualcosa di soggettivo; io, ad 
esempio, preferisco le MFC alle WTL, perche' personalmente non mi piace 
quell'uso cosi' "intenso" dei template fatto dall WTL, ed inoltre le MFC 
mi sembrano molto piu' complete (certo: anche piu' pesanti delle WTL!); 
pero' e' una questione di gusti personali, non mi sogno certo di 
definire le WTL come una "schifezza programmatori", ci mancherebbe!!
E, inoltre, riconosco il fatto oggettivo che con le WTL puoi creare 
eseguibili piu' snelli rispetto ad MFC (cosi' come sono oggettive altre 
questioni, come il fatto che C++ con MFC o WTL surclassa abbondantemente 
Java con Swing, sia sotto il profilo delle performance, sia 
sull'interazione con i vari sottosistemi di Windows: Win32, COM, ...)
Ciao :)
Dan

 Java quindi... :-PPPPP 
:-)

 Secondo me sei incapace ad usarle... 
Sei la classica persona che, abituata ad usare la lima, non riconosce la 
comodita' di una fresa a controllo numerico...

 che hanno davvero tanti vantaggi
Sono un autentico orrore dal punto di vista del design e sono veloci 
proprio perche' non fanno praticamente niente e non e' un caso se la 
stessa M$ le ha abbandonate al loro destino (oltre a non usarle al 
proprio interno da moltissimi anni).
Un progetto interessante potrebbe diventare questo:
http://vcf.sourceforge.net/

 proprio interno da moltissimi anni).
Puoi citarmi la fonte di questa informazione ?
In Visual Studio .Net 2003, cioč l'ultima versione dell'ambiente di
sviluppo MS, le MFC sono giunte alla versione 7.0, non sono quindi
abbandonate a loro stesse.
Leggi anche
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vclrfatlcompatibilityissues.asp
La pagina inizia con "Many improvements have been made to the ATL and MFC
libraries since Visual C++ 6.0": mi sembra dica il contrario.
Ciao
Stefano "HappyMan" (Lake Maggiore - Italy)
-- 
The Personal Framework for Object Oriented Windows Development (Win32)
http://www.sgr.info
Email happyman69 (at) 
libero.it

 comodita' di una fresa a controllo numerico...
E tu hai detto che la lima fa schifo. Non è vero, ci puoi fare molto di 
più di quello che fai con la fresa c.n., basta impegnarsi...
-- 
Luc

 proprio interno da moltissimi anni).
Questo è palesemente falso. 
-- 
Luc

 proprio interno da moltissimi anni).
Dal punto di vista implementativo, posso anche darti ragione, ma da qui, 
ad asserire che la Microsoft non le usa e pure da molti anni, mi sa 
tanto di ca**ata.
M.

 sull'interazione con i vari sottosistemi di Windows: Win32, COM, ...)
Beh questo fa parte del gioco, ogni scelta ha i suoi pro ed i suoi
contro, con WTL (ATL) riesci a creare degli eseguibili leggeri e
che non dipendono dall'avere o meno le corrette librerie MFC
installate; di contro certe cose sono molto più semplici com MFC
però in certi casi MFC è più lento di... insomma ... ci sarebbe da
discutere per dei mesi ed alla fine non avremmo concluso nulla
giusto come "nota a margine", ho provato qualche tempo fa queste
librerie 
http://www.wxwindows.org/
 e sinceramente debbo dire che
non sono male, specialmente se devi creare applicazioni cross
platform (es. Windows, Linux e Mac) se non hai provato wxwindows
beh ... facci un giro; nella peggiore delle ipotesi avrai scoperto
qualcosa di nuovo ;-)
Ciao

Martino Serri wrote:

Per esempio: secondo te Office e Visual Studio usano le MFC ?
Se si' le hanno completamente riscritte visti i controlli con un 
look&feel molto diverso da quello standard (specie in Office 2003).

 Puoi citarmi la fonte di questa informazione ?
Si potrebbe cominciare con il dire che il prossimo motore grafico di M$ 
(Avalon) si basa su .NET, ma basterebbe semplicemente un po' di spirito 
di osservazione per vedere che stanno facendo di tutto per spingerti ad 
usare il nuovo framework (che, tra parentesi, non e' neppure tanto male).

 look&feel molto diverso da quello standard (specie in Office 2003).
Aargh, no ti prego...non mi dire queste cose che a quest'ora del pomeriggio
mi fanno male :-/
La tecnica dell'ownerdrawing [1] non ha niente a che vedere con le versioni
di MFC, anzi io ne faccio un uso estensivo nei miei programmi Win32 senza
neanche usare le MFC.
Ciao
Stefano
[1]
Si intende la tecnica con la quale si intercetta l'evento che normalmente
gestisce il disegno del controllo da parte del sistema operativo e lo
modifichi a tuo piacimento. 
In questo modo puoi disegnare menu in stile Office 97 o 2003, Listbox con
le icone, etc etc, il tutto anche senza usare le MFC (vedi il messaggio
WM_DRAWITEM su MSDN)


 usare il nuovo framework (che, tra parentesi, non e' neppure tanto male).
Vero. Questo vale per il futuro.
Tu però hai scritto un'altra cosa:
"non e' un caso se la stessa M$ le ha abbandonate al loro destino (oltre a
non usarle al proprio interno da moltissimi anni)."
che come ho evidenziato non è assolutamente vero.


 neanche usare le MFC.
Lo userai per disegnare all'interno di un ListCtrl, ma non voglio 
credere che ti ridisegni da zero i menu :)

 credere che ti ridisegni da zero i menu :)
Non vorrei stupirti, ma se usi la tecnica dell'ownerdrawing sei *costretto*
a disegnarti da zero i controlli, i menu non fanno eccezioni...
Ciao :-)


 Ciao
Ciao! :)
Dan

 implementare) etc etc, il tutto in un file .cpp di poche decine di kb.
Questa si' che e' programmazione!! 
...Se molti lavorassero come il buon HappyMan, credo che tutti potremmo 
sfruttare molto meglio i gigahertz del clock della CPU e le tonnellate 
di megabyte di RAM degli attuali PC! :)
Ciao,
Dan

 di megabyte di RAM degli attuali PC! :)
...dove te lo offro il caffè ? 


 Ciao :-)
Ciao! :)
Dan

 di megabyte di RAM degli attuali PC! :)
Si, ma se lavori in una software house raramente hai tempo di cimentarti 
in queste "raffinerie"... ;)
Dove lavoro io, ogni tanto ci "provo", ma il capo poi me lo fa sempre 
"notare"... Meno male che alla fine le cose gli piaciono (magari con 
qualche piccola aggiustatina)... ;) 
-- 
Luc

 in queste "raffinerie"... ;)
Vero, infatti i progetti Win32 sono sviluppati per hobby e nel tempo libero
(tranne uno, grosso, dove ho utilizzato il codice scritto per hobby).
Il mio vantaggio è che essendo un libero professionista decido i miei
tempi, compatibilmente con le scadenze etc etc :-)
