Sto lavorando a qualcosa che richiederà il monitoraggio di molte forme. Dall'esterno del modulo e senza inserire alcun codice all'interno del modulo, ho bisogno di catturare in qualche modo eventi da queste forme, molto probabilmente sotto forma di messaggi di Windows. Ma come cattureresti i messaggi di Windows dall'esterno della classe a cui è correlato?Come posso rilevare determinati eventi di un modulo dall'esterno del modulo?
Il mio progetto ha un oggetto che avvolge ogni forma che sta monitorando, e presumo che questa gestione andrà in questo oggetto. Essenzialmente, quando creo un modulo che voglio monitorare, creo un oggetto corrispondente che a sua volta viene aggiunto a un elenco di tutte le forme create. Soprattutto, quando quel modulo è chiuso, devo sapere che posso rimuovere l'oggetto wrapper di questo modulo dall'elenco.
Tali eventi comprendono:
- Minimizzare
- Massimizzare
- Restore
- Chiudi
- Focus in/out
quello che non voglio:
- Qualsiasi codice all'interno di qualsiasi forma o unità di forma per questa gestione
- Ereditando le forme da ogni forma di base personalizzato
- Uso degli eventi del form, come
OnClose
perché saranno utilizzati per altri scopi
Cosa io voglio:
- Gestione dei messaggi di Windows per questi eventi
- Eventuali suggerimenti su come ge messaggi t finestre dall'esterno della classe
- Quali messaggi finestre ho bisogno di ascoltare per
domanda ri-scritto con le stesse informazioni, ma diverso approccio
Non ne sono così sicuro ma penso che potresti anche considerare l'iniezione di codice come era fatto da qualche framework AOP. – menjaraz
Si sa che è possibile sostituire gli eventi del modulo con il proprio gestore ma mantenere il valore precedente e quindi richiamare il gestore vecchio dal gestore di sostituzione, giusto? È più semplice della vera "iniezione di codice" o vero "aggancio". Questo è molto simile a come gli "interrupt handlers" funzionano nella maggior parte dei sistemi operativi. Lo chiamiamo "sostituzione vettoriale". –
@WarrenP Lo so, e probabilmente lo farei se David non avesse menzionato un metodo più pulito. Ma questa strategia (almeno secondo me) è probabilmente efficace al 90-95% (posso prevedere alcuni problemi che potrebbero rovinare questa situazione). La soluzione di David è efficace al 100%. –