Newsgroup: it.comp.programmare.win32
Titolo: problemi con MFC

ciao a tutti,
ho creato una finestra di dialogo nel mio progetto (che e' stato creato
dall'appwizard di vc++6), ho collegato, tramite class wizard, la finestra ad
una classe derivata da CDialog, e ho intercettato un messaggio del menu
dell'applicazione per visualizzare la fin (tramite la chiamta a DoModal() )
e ottenere quindi informazioni.
quando pero' scelgo la voce di menu appropriata la finestra non appare,
eseguo il debug, la funzione di risposta al comando viene eseguita,
l'istanza della classe della mia finestra di dialogo viene creata
correttamente ma al momento della chiamata a DoModal() la finestra non viene
visualizzata e la funz ritorna 0x0000.
ho provato di tutto tra le mie possibilita', sapete aiutarmi?
ovviamente la risorsa e' nei file del progetto, e' compilata correttamente,
il file "resource.h" e' incluso dove serve, l'header della classe CMyDlg e'
incluso dove serve anche lui ecc...
grazie mille in anticipo
ciao, roku ^_^
ps. e' possibile (con vc++6) creare un progetto che utilizzi mfc, senza
affidarsi all'app wizard, partendo cioe' da zero, come facevo con la "win32
application"?
ho provato a fare "win32 app" e nelle opzioni del progetto selezionare
"using mfc in a shared dll" ma non funziona...
grazie ancora


esiste una funzione chiamata mi pare void OnMyCommand() creata da class
wizard
cosi' definita:
void OnMyCommand()
{
   CMyDlg myDlg;
   int dlgReturn = myDlg.DoModal();                //e col debug osservo
stupefatto che dlgReturn e' = 0x0000... cioe' ne' IDOK(0x0001) ne'
IDCANCEL(0x0002)...
}
una cosa molto semplice!
ovviamente CMyDlg e' ereditata (pubblicamente) da CDialog di MFC
l'header della classe CMyDlg e' incluso nel file che contiene questa
funzione che mi sembra sia MyProgramView.cpp (file creato da app wizard...)
quel che mi preocccupa e' che se faccio un programma minuscolo creato
apposta per testare questa operzaione tutto funziona alla perfezione, ma
quando scrivo il codice nel programma vero, quello che poi mi serve, una
volta arrivato alla chiamata a DoModal() il dialogo non viene
visualizzato...
non capisco perche' dovrei avere un puntatore globale... (nel progr piccolo
di test, non ne ho alcun bisgno) l'istanza della classe del dialogo viene
creata nella suddetta funz. e distrutta dopo avermi comunicato cio' che ha
fatto l'utente...
il mio peggior sospetto e' che class wizard faccia una magia non troppo
bella e mi vada a fare qualche casino in punti dove capisco ben poco...
cmq se volete tutto il programma (o anche solo qualche file ve lo
posto/mando)
grazie ancora...
spero di riuscrie a venirne a capo un giorno, non posso mica fare i miei
programmi senza dialoghi ^_^

 una cosa molto semplice!
Allora, il programma entra in OnMyCommand() e crea il dialogo.  Poi quando
e' finita la funzione, ne esce ... distruggendo myDlg.  Pensa, qual' e' lo
scopo di myDlg?  Esiste solamente quando il programma sta eseguendo questa
funzione.  Prova con un globale.  Scometto che funzioni.
Dave


dunque... lo scopo del dialogo e' di ricevere dati e passarli alla classe
che lo "chiama" (la classe che ha la funz. OnMyCommand(), una volta passati
i dati non serve piu', e comunque il problema e' che non viene
visualizzato... ho provato a farla globale, niente... il dialogo non
appare!!!
:-(
grazie lo stesso per l'interessamento...

 e' finita la funzione, ne esce ... distruggendo myDlg.
Assolutamente no: l'esecuzione di OnMyCommand viene sospesa fin tanto che la
finestra di dialogo è visualizzata e DoModal() non restituisce un valore
(altrimenti perché sarebbe modale?). L'unica cosa che non mi è chiaro è chi
è OnMyCommand() e come viene chiamata. Dal codice postato da roku chou
sembra una funzione globale e non può essere. roku, controlla se in realtà
non sia:
void CMyProgramView::OnMyCommand()
e che sia regolarmente registrata nella mappa messaggi della vista. Strano
anche il fatto che DoModal() restituisca 0: secondo MSDN dovrebbe
restituire -1 nel caso non possa creare la finestra o IDABORT in caso di
altri errori.
--
  Jerle Shannara
Per rispondere in email togli NO e SPAM
homepage 
http://utenti.tripod.it/jerleshannara

 application"?
Praticamente puoi crearlo da zero anche con AppWizard. Togliendo tutto
ti viene appena gestita la creazione della finestra...
--
Lorenzo

 altri errori.
boh... sono disperato :-(
