Domanda

Abbiamo un'applicazione Win32 che ospita il runtime .NET e apre i moduli gestiti .NET dalla parte Win32 dell'applicazione.

Queste finestre sono sempre aperte come finestre modali.

Su alcune macchine, quando queste finestre sono chiuse, la finestra di Win32 che si trova dietro non si attiva, ma viene inviata dietro Word, Outlook o qualsiasi altra cosa tu possa avere aperto.

Inoltre, a volte, se apriamo un tale modulo .NET, quindi alt-tab su Word o qualche altra applicazione, e quindi facciamo clic sull'icona della barra delle applicazioni per la nostra app, viene visualizzata la finestra Win32. Questo ovviamente sta ancora aspettando la chiusura della finestra modale di .NET, quindi è ovviamente inutilizzabile. Se facciamo alt-tab su qualcos'altro e limitiamo a minimizzare quell'altra cosa, allora riappare la nostra finestra .NET.

La parte incoerente è che ciò si verifica solo su alcuni computer e non su tutti. Su molte macchine, inclusa la mia, funziona esattamente come previsto. Il focus sulla finestra giusta funziona ogni volta.

Non dubito che abbiamo fatto qualcosa di sbagliato, ma non riesco a capire quale sia il problema.

Qualcuno ha idea di cosa dovrei cercare? Abbiamo esaminato i runtime .NET installati e poiché due di questi computer in cui funziona su uno ma non sull'altro sono entrambi computer di sviluppo, contengono gli stessi service pack per .NET e così via.


Modifica: Bene, @sam , avevi ragione nel dire che ne avevamo diversi allestimenti in questa corsia. Entrambe le macchine eseguono Windows XP SP3, ma il mio eseguiva il tema Windows classico e l'altro eseguiva il nuovo tema XP. La modifica del tema su quell'altro computer in classico rimuoveva il problema, ma cambiandolo di nuovo al tema XP non lo faceva riapparire.

Quindi ora abbiamo due macchine in cui funziona e il cliente ha ancora il problema, anche se apparentemente ha un tema classico.

È stato utile?

Soluzione

Ultimamente ho notato che l'attivazione della finestra è impostata in modo diverso su Windows Vista Aero come in passato su XP. Invece dell'ultima finestra attivata di un'app che riceve lo stato attivo, la finestra principale riceverà lo stato attivo sulla riattivazione.
La cosa divertente è che, cambiando la vista con il vecchio tema di Windows (classico o di base), lo stato attivo verrà impostato sulla finestra figlio che l'ha avuta l'ultima volta, proprio come su XP.

Il tuo problema potrebbe essere molto diverso, ma forse hai versioni del sistema operativo diverse?

Altri suggerimenti

Questo problema mi ricorda che WPF ha lo stesso problema con la visualizzazione di finestre di dialogo da una finestra principale.

Suppongo che ti riferisci alla versione 2.0 del framework .NET e che tu abbia un modulo nativo che chiama l'assembly .NET.

Qualsiasi control dai moduli di Windows (che include anche i moduli), implementa un'interfaccia chiamata IWin32Window , che espone l'handle Win32 di quella finestra.

Quello che potresti fare è utilizzare un NativeWindow per ascoltare WM_ACTIVATEAPP o qualsiasi altro evento che segnali che l'app è attiva e invia un segnale alla finestra .NET per ottenere lo stato attivo.

Un'altra opzione sarebbe quella di utilizzare una finestra di dialogo nativa che ospita un controllo utente .net invece di winforms (se possibile).

L'ho già fatto prima senza troppa confusione, usando C ++ \ CLI, ma in questo momento non mi viene in mente. Forse questo sarebbe un buon punto di partenza per te.

Ricordo di aver aiutato un amico con lo stesso problema (non ricordo se fosse in .net 2.0 o 3.5)

Suppongo che sul tuo modulo principale crei nuovi moduli e utilizzi

Form2 form2 = new Form2();
form2.ShowDialog();

Per visualizzare il popup modale, ora sembra che il metodo ShowDialog non utilizzi il modulo che chiama ShowDialog come gestore per impostazione predefinita, quindi è necessario farlo

form2.ShowDialog(this);

in questo modo l'applicazione, per quanto ne so, sa a quale maniglia tornare, e quindi ritorna sempre al tuo principale.

Ulteriori informazioni sul modulo ShowDialog msdn: http://msdn.microsoft.com/en-us/library/w61zzfwe. aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top