Newsgroup: it.comp.programmare.win32
Titolo: salve! ...primo problema!

Salve a tutti!
è la prima volta che scrivo su questo NG....
dunque: sto iniziando a programmare con VC++6 e volevo applicare un po'
tutto quello che ho imparato fin'ora...solo che:
con appwizard ho creato un mfc dialog based; ho inserito un bottone (oltre
ai 2 di default) e un richedit; ora: premendo il bottone dovrebbe venire
scritto "qualcosa" nel controllo richedit... ma niente!
ho creato un nuovo membro classe per il rich e ho creato un handler per il
bottone e funziona tutto: quando pigio e chiamo con un afxmessage il membro
( dopo aver assegnato CProvaDlg::m_membro= _T("ciao"); ) , mi dice "ciao";
solo che non lo visualizza nel richedit!
In un applicazione non dialog based ci sono riuscito, ma qui niente! Io
vorrei creare un programma simile ad una calcolatrice...
dove sbaglio? cosa non ho fatto?
grazie!
--
    --------------
   ----------------         
dodi...@tiscalinet.it
  ---------|--------
   --------|-------            ICQ: 36959563
    ------_|------
       - (_)# -

 solo che non lo visualizza nel richedit!
Non e` chiarissimo dalla tua descrizione, comunque, supponendo che
tu abbia usato il meccanismo DDX per associare il m_membro al tuo
controllo richedit, probabilmente quello che ti sei scordato di fare e`
chiamare la UpdateData(FALSE) del tuo oggetto di classe CProvaDlg
quando vuoi che l'aggiornamento dei membri-dati si rifletta nello stato
visibile dei controlli.
Prova ad aggiungere appunto una riga
    UpdateData(FALSE);
alla fine del tuo "handler per il bottone", e sappici dire...
Alex

wow, perfetto!
e la cosa ++ bella è che ho anche capito! ( la prossima volta sarò + chiaro)
grazie mille, anche per la rapidità: l'entusiasmo da novizio trsforma i
programmi "arenati" in pulci nell'orecchio la notte... :-)
ora funziona!
altre tre domandine però(+ che altro curiosità):
-ho visto che quando si inizia un progetto, nella casella platform è
selezionata l'unica voce "win32"; si può aggiungere altro?
-sto studiando su 2 libri: learn vc++ 6 di Chuck Sphar ( che non citate mai
nel Ng) e inside VC++ di krugliski (che invece citate) però della versione
4. Vanno bene (per ora almeno) o dalla versione 4 è cambiato tutto?
-i miei libri continuano a parlare di overriding... se non capisco cos'è è
grave o posso per ora infischiarmene?
penso che per un po' basterà!


 grave o posso per ora infischiarmene?
E` molto grave, se intendi usare anche appena appena il C++, compreso
quel minimo che ti serve per fare uso efficace di MFC.
Visto che e` strettamente un problema di linguaggio C++, non connesso
in particolare alla piattaforma Windows, ti consiglio di chiedere ulteriori
chiarimenti su questo tema sul gruppo apposito, it.comp.lang.c++ (mentre
per qualsiasi cosa SIA legata invece a Windows, questo gruppo su cui gia`
stai postando, it.comp.programmare.win32, e` invece proprio giusto).
Alex

ok provvederò a tutto...
Un ultima cosa: ho notato che per trasportare i mie programmi in giro, ho
bisogno del file: MFC42D.DLL.
E non è un bella cosa, visto che i mie programmi vanno per lo più sui 100k,
mentre quella dll è 6 volte + (anzi ++) grande! C'è soluzione?
grazie e buonanotte!


 mentre quella dll è 6 volte + (anzi ++) grande! C'è soluzione?
Certo: anzitutto potresti compilare a release, invece che a debug,
cosi` da usare MFC42.DLL senza la D, che e` molto piu` piccola (e
piu` efficiente).  Inoltre potresti richiedere l'uso delle MFC come
libreria statica invece che dinamica, cosi` ogni programma se le
copia dentro tutte e diventa gigantesco (pessima soluzione:-).
Puo` darsi che queste opzioni non siano disponibile sulla "Learning
Edition" di VC++, se e` quella che stai usando, ma solo su quella
"Professional".  La "Learning" e` fatta per aiutare ad imparare e non
per sviluppare programmi professionali da ridistribuire...
Alex

ciao!
...veramente nel mio hd risulta che mfc42d è 70k + piccola di quella senza
d...
:-(
(comunque uso la enterprise ed.)
ma per ora ho lasciato perdere visto che modificando a release credo di aver
fatto solo casino...
mi sa che è meglio fare un passo alla volta!
non appena finito, posterò qui di seguito un link al mio programmino...
grazie mille per ora...!


 d...
Hai ragione, ho appena controllato.  Evidentemente l'uso delle inline
nella versione ottimizzata di MFC viene a costare in termini di spazio
piu` di quanto non si risparmi con altre ottimizzazioni.
Potresti cercare di ricompilare MFC con l'opzione "Minimize Size"
come scelta di ottimizzazione, ma non e` proprio banale.
Zippandola, MFC42.DLL si riduce circa della meta`, a 460 K o
poco piu`.  Inoltre, naturalmente, chi usa il tuo programma la
deve scaricare solo se non ne ha gia` una copia istallata (visto
che tante altre applicazioni la usano, e` tutt'altro che impossibile
che una copia gia` istallata sia gia` sui directory di sistema).
L'alternativa e` usare un framework diverso, come ATL, che e`
studiato con l'obbiettivo primario di ridurre la dimensione del
codice eseguibile, piuttosto che non con quello di rendere la
vita (relativamente) facile al programmatore applicativo.
Alex

 soluzione?
No. Io tengo il Visual C++ 4 (che si "accontenta" di MFC40.DLL) per
questo motivo. E anche perche` non voglio spendere altri soldi per il 6.
:-)
... I will defend to your death my right to my opinion.
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

ok grazie, sto capendo!


mmmm.....
ti ringrazio!
comunque per ora sto lottando contro un altro problema interno al mio prog
(il post a lang.c++) e quindi ho messo in coda la questione!
...anche perchè ho visto che c'è bisogno pure di mfco42d.dll  e  msvcrtd.dll
che insieme all'altra e al prog fanno 1.3 mega (con rar_autoexe fanno 750k);
:-((((
quindi devo capire bene come funzionano le dll e a cosa servono (capitolo 10
del mio libro);
comunque mi riallaccio per chiedere: quando creo un combo-box, un richedit o
un altro qualsiasi "robo" del genere e ci aggiungo la rispettiva variabile
membro, VC mi fa scegliere il tipo tra pochi predefiniti (per il combo solo
int o CString); io ho provato a cambiarli con un tipo mio (enum appunto) ma
succede casino. Mi serve sapere, non come si fa ma solo se si può e sbaglio
io o è proprio proibito?
Poi : " Debugger.Evaluate ("var=1") " l'ho copiato pari pari dall'help di VC
; era la cosa + vicina che ho trovato all " eval() " di javascript. Ora
rileggendo l'help mi rendo conto che non c'entra proprio niente...  ero
stanco... Ma ciò che mi preme sapere è se esiste un qualcosa che trasformi
la stringa "IDC_FINE" in un qualcosa di utilizzabile veramente, tipo:
 for (i=0..etc..) eval("IDC_FINE"+i)=var[i];
poi adesso che mi hai dato l'idea dei puntatori...hai ragione...ma io (se il
metodo è giusto e ammettendo che esista una sorta di eval() ) farei lo
stasso così:
(i miei membri variab si chiamano IDC_edit1,IDC_edit2,IDC_edit3.... e sono
int)
for (i=0;etc etc) {
int*  eval('puntatore'+i)= eval('&IDC_edit'+i)
}
...e se per caso è un loop blasfemo, chiedo perdono!
per ora mi viene in mente solo questo!
ciao!


  for (i=0..etc..) eval("IDC_FINE"+i)=var[i];
Solo se tu garantisci la presenza, _a runtime_, di una qualche struttura
che metta la stringa "IDC_FINE" in corrispondenza al numero in cui tu
desideri che "si trasformi".
Non esistono automatismi del linguaggio C++ (ne` del "dialetto" VC++)
che ti garantiscano questo.  In particolare, non esistono assolutamente
per stringhe, come quella che tu indichi, che vengono presumibilmente
elaborate *dal preprocessore*... quelle non le vede neppure il compilatore
vero e proprio (sono gia` state trasformate in numeri quando gli arrivano
a portata di tiro!).
Puoi, naturalmente, usare vari schemi esistenti, ad esempio una
type-library del COM, la string-table presente fra le risorse del
tuo eseguibile, eccetera.  Se ti convenga farlo... dipende.  Penso
di no, a meno di esigenze molto particolari; di solito, una semplice
tabella esplicita di corrispondenza e` piu` semplice ed efficace.
Alex

Ho risolto con una decina di puntatori!
grazie per l'aiuto, se ti interessa vedere il risultato dei tuoi aiuti...
web.tiscalinet.it/sogniperduti/software/index.html
..il primo parto della DoDiesis Software :-)
adesso sono alle prese con una altro *utilissimo* programma:
tu gli dai una parola e lui ti calcola quanti tentativi ci vogliono perchè,
prendendo delle lettere a caso da tutto l'alfabeto, esca quella parola!
(...mai sentito dire: se tu butti un sacco di lettere per  terra *è
possibile* che ti esca la Divina Commedia!) bello vero? ;-)
a dos ci sono riuscito... ma in win mi si pianta quando la parola supera le
5 lettere e poi non riesco a fargli fare la cosa + divertente: fargli
scrivere mano a mano, nell'apposita editbox, il risultato!:-(
Pigio il bottone e lui fa un loop, ma non fa l'UpdateData(FALSE); , cioè non
esce dal loop fino a quando non ha trovato la parola! Ma così non c'è gusto!
(e quando mi servirà fare veramente una cosa uguale, mi pianterò) Questo
vuol dire che non si può fare un UpdateData(FALSE); all'interno di un loop
in un funzione? Devo trovare un altra strada?
...la finirò mai con le domande?


 quella parola!
Forte, adesso lo scrivo anche io:
main() { char str[128]; scanf("%s",str);
printf("%d\n",(int)pow(27,strlen(str))); }
;-)
... Death is life's answer to the question 'Why?'


....
:-(


 in un funzione? Devo trovare un altra strada?
Sospetto che il problema che stai osservando dipenda dal fatto che,
nel tuo ciclo di elaborazione, non "servi i messaggi"; e` per questo
che le tue chiamate a UpdateData non hanno effetto visibile -- i vari
controlli sanno cosa devono mostrare, ma non gli arriva mai (in quanto
il loop dei messaggi non lo esegui mai) il WM_PAINT relativo.
Puoi rimediare in tanti modi, dal piu` semplice al piu` sofisticato.
Puo` darsi ad esempio che basti fare Invalidate e UpdateWindow
del tuo dialogo -- quest'ultima 'by-passa' la coda dei messaggi ed
esegue direttamente il WM_PAINT.  Puo` darsi anche che questo
non sia sufficiente, in certi casi, perche` _altri_ messaggi non li
stai comunque ricevendo e servendo (ed e` una pessima idea in
Windows non servire regolarmente il proprio loop dei messaggi);
allora si va sul piu` raffinato, come spezzare il lavoro in 'mattoni'
da eseguire all'OnIdle, ovvero utilizzare un worker-thread.
Alex

:-)
ci sono riuscito!
