PDA

View Full Version : (VC++/Win32) Domande sul CreateDialog e ciclo messaggi.


fdfdfdddd
31-10-2006, 09:04
Salve a tutti, vorrei porvi alcune domande inerenti alla creazione di una finestra con le API Win32 in ambiente Visual C++ 6.0

Dunque, immaginate che crei una finestra di dialogo tramite la funzione CreateDialog:

hDlg = CreateDialog(hDSInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, SettingsDlgProc);

dove il parametro "SettingsDlgProc" è ovviamente una funzione che gestisce il ciclo dei messaggi della finestra appena creata.

Supponete che io ora crei una nuova finestra nel modo seguente:

hDlg2 = CreateDialog(hDSInst, MAKEINTRESOURCE(IDD_DIALOG2), hDlg, SettingsDlgProc2);

come posso far si che un evento che mi arriva su questa finestra venga immediatamente "sbattuto" sulla finestra padre?

Grazie a tutti anticipatamente per le risposte e scusatemi se sono stato poco chiaro!

andbin
31-10-2006, 09:33
come posso far si che un evento che mi arriva su questa finestra venga immediatamente "sbattuto" sulla finestra padre?Innanzitutto dovresti specificare bene quale evento.

Poi tieni presente una cosa: come credo tu sappia, CreateDialog crea una dialog non modale. Questo vuol dire che le 2 dialog box che crei possono interagire indipendentemente con l'utente. Con l'unico particolare che la seconda dialog starà sempre visivamente "al di sopra" della prima.

The3DProgrammer
31-10-2006, 10:21
sottoscrivendo tutto quello che ha detto andbin (ovviamente è fondamentale sapere quale tipo di messaggio, intuitivamente suppongo un messaggio user defined ma dipende da cosa devi fare) credo che con una banale sendMessage dovresti cavartela, eventualmente fai in modo che nella msgProc della dialog2 sia visibile l'handle della dialog 1

ciao

andbin
31-10-2006, 10:50
eventualmente fai in modo che nella msgProc della dialog2 sia visibile l'handle della dialog 1Basterebbe prendere l'handle con GetParent().

fdfdfdddd
31-10-2006, 12:00
Rieccomi. Innanzi tutto grazie mille per le risposte. Bene, la situazione è questa: devi scrivere una sorgente twain che apre a sua volta un'altra sorgente. A parte il casino incredibile per realizzare sta cosa (a proposito se avete info, esperienze ecc. ecc. sono tutto orecchie), c'è il fatto che twain "comunica" con le applicazioni ridirigendo i suoi messaggi su una finestra. Quindi in realtà i due dialog box che citavo prima, neanche sono mostrati a video, mi servono perché: "dialog1" mi permette di far comunicare l'applicazione chiamante con la sorgente "virtuale" e "dialog2" la sorgente "virtuale" con quella vera (uno scanner per intenderci). A questo punto visto che vorrei che il dialogo fosse "trasparente" in realtà gli eventi scatenati su "dialog2" dovrebbero essere passati tali e quali a "dialog1" che li passerebbe all'applicazione chiamante.

The3DProgrammer
31-10-2006, 14:49
Basterebbe prendere l'handle con GetParent().

giusto :stordita: :)

ciao