Newsgroup: it.comp.programmare.win32
Titolo: VC++ AND WM_USER

Ciao a tutti,
ho un problema che mi ha tenuto sveglio fino alle 2 senza successo.
Il mio progetto parte con una sottoclasse della classe CDialog (A).
Dal menu' associato a questa finestra apro, in modale, un'altra finestra
anch'essa sottoclasse della classe CDialog(B).
B richiama un modello di gestione DB Access. Al termine
dell'aggiornamento/fallimento dell'operazione
il gestore db lancia un messaggio utente a tutti.
Non ricordo esattamente la sintassi ma dovrebbe essere circa:
::PostMessage(HWND_BROADCAST,WM_MIO_MESS,returnCode,0);
La classe A riceve il messaggio ed esegue le operazioni che gli ho
associato. La classe B non lo riceve.
La definizione del messaggio in entrambe le classi credo sia corretta
perche':
1) Ho scritto le stesse identiche istruzioni di definizione nelle due
classi
2) Se all'interno della classe B eseguo
PostMessage(WM_MIO_MESS,returnCode,0);
funziona tutto correttamente.
Insomma sembra che la classe A tolga dalla coda il mio messaggio e non
lo trasmetta al figlio(B).
Grazie a tutti coloro che proveranno a non farmi passare un'altra notte
insonne.
-- 
Togliere ICEMAN dall'indirizzo per l'e-mail
Bye
   Nameci

 lo trasmetta al figlio(B).
Ma tu, gli hai detto, alla classe A, che deve spedire questo messaggio
al figlio B...?  Se B e` appunto un figlio, non e` allora fra i
destinatari previsti da HWND_BROADCAST, quindi, se deve
ricevere il messaggio, bisogna appunto che ci pensi esplicitamente
il padre.
Alex

 il padre.
Quello che volevo fare era di svincolare dalla classe A la conoscenza
della classe B.
Cioe', adesso sto studiando il C++ ed il progetto cresce con il libro.
Dopo vorrei creare
una classe controllore che mi apra le varie finestre non in modale, e
dove nessuna finestra
conosce l'esistenza di un'altra. A tal proposito volevo evitare in
questa fase iniziale
di scrivere troppo codice che mi lega una finestra ad un'altra.
Domanda: non esiste un metodo/parametro nella PostMessage per far
arrivare il metodo anche alla classe B?
Se la risposta e' no, come faccio a dire ad A di passare il metodo a B? 
Ho provato qualcosa di simile
void ClasseA::Msg()
{
  ClasseB instB;
  instB.PostMessage(WM_MIO_MESS,returnCode,0);
}
ma mi va in errore di memoria, handle non valido o simile.
Grazie


   ClasseB instB;
ma, anche se hanno lo stesso nome, la instB locale al
metodo Ana, e quella locale al metodo Msg, sono oggetti
completamente distinti; due istanze diverse e separate
della stessa classe.
Insomma, mi pare che qui ci sia, di fondo, una certa
confusione fra cosa sia una classe, e cosa siano, invece,
gli oggetti che, di quella classe, sono istanze.
(Non semplifica certo le cose che, poi, le _finestre
vere e proprie_ che corrispondono agli oggetti, da un
certo punto di vista "sono" gli oggetti, ma da un altro,
no, non proprio; ma spero che di questo per ora tu
non abbia necessariamente bisogno di occuparti).
Non esiste il concetto di "mandare un messaggio a una
classe".  Un messaggio, in windows, si manda ad una
finestra (in casi particolari, a un _gruppo_ di finestre
che soddisfano certi requisiti, HWND_BROADCAST; o,
a un "thread", indipendentemente dal fatto che abbia
finestre; ma, normalmente, a una finestra).
Una finestra puo` corrispondere ad un oggetto, che 
e` un'istanza di una certa classe, ma non puo`
corrispondere alla "classe tutt'intera".
Devi dunque ragionare in termini di specifiche istanze,
e non di intere classi, quando vuoi mandare o ricevere
messaggi.
Una volta chiarito questo, possiamo delineare le varie
possibili architetture con cui un certo _oggetto_ di
classe B (NON "la classe B", come spero che sia chiaro
ormai) potra` essere il destinatario del messaggio che
ti interessa.  Ma vorrei prima di tutto sospendere qui
e verificare che sino a questo punto ci capiamo.
Per avere piu` generali chiarimenti sulle differenze
fra classi ed istanze, puo` essere piu` appropriato
forse il gruppo it.comp.lang.c++, visto che questa
distinzione non dipende in realta` da Win32, e la si
potrebbe esemplificare, spiegare, ed analizare, in
modi del tutto generici, indipendenti dalla piattaforma.
Specifici della piattaforma sono pero` i concetti di 
"messaggio", "dialogo", "finestra", eccetera.  Non
che altre piattaforme (non tutte, ma molte) non
abbiano concetti _analoghi_, ma possono essere
inquadrati in modi assai diversi da una piattaforma
all'altra (il C++ Standard non se ne occupa, mentre
di classi e di loro istanze si occupa eccome:-).
Alex

Grazie a tutti delle risposte.
Ho ancora le idee confuse ma usando come traccia le risposte cerchero'
di eliminare la nebbia con l'ausilio del manuale.
Spero di postare a breve un problema diverso (segno che questo l'ho
capito e superato).
Grazie ancora
