Domanda

Sto aggiungendo finestre di dialogo WPF C # a un'app MFC C ++ esistente, usando un livello di interfaccia C ++ / CLI. Ho fatto funzionare le cose, tranne per il fatto che ho un problema con la modalità. Ad esempio:

  1. L'app MFC mostra una finestra di dialogo WPF usando ShowDialog. Funziona come previsto.
  2. Quella finestra di dialogo WPF mostra una finestra di dialogo MFC usando DoModal. La finestra di dialogo WPF è nascosta dietro l'app C ++ di base e non è disabilitata se non modifico manualmente IsEnabled. Non ideale, ma funziona.
  3. Ora, quella finestra di dialogo MFC è chiusa. Ora per qualche motivo l'app MFC di base è abilitata, quando dovrebbe essere disabilitata a causa della chiusura della finestra di dialogo WPF. È negativo, poiché ora consente all'utente di fare cose folli mentre la finestra di dialogo WPF è ancora aperta.

Ho la sensazione che funzionerebbe meglio se potessi impostare correttamente i dialoghi dei genitori. Ma finora non sono stato in grado di impostare il genitore di una finestra di dialogo MFC come finestra di dialogo WPF o viceversa. E non so nemmeno se ciò risolverà il problema.

Qualche idea?

È stato utile?

Soluzione

All'apertura di un CDialog, il trucco è usare un WindowsInteropHelper per ottenere l'HWND della finestra di dialogo WPF principale. Quindi, puoi usare CWnd :: Attach per avvolgere HWND in una classe CWnd per passare al costruttore del CDialog.

Il problema che ho avuto è stato che avevo già costruito il CDialog., ma non ancora visualizzato. Le varie versioni di SetParent possono essere utilizzate solo se la finestra figlio di destinazione ha già un handle valido. Ho dovuto scrivere una nuova funzione nella mia classe CDialog per impostare m_wndParent, che è quello che usa come genitore quando crea finalmente la finestra di dialogo. Quindi tutto funziona alla grande!

In qualche modo la creazione di finestre di dialogo WPF dalle finestre di dialogo MFC " funziona semplicemente " ;. È magico.

Altri suggerimenti

Quando si mostra la finestra di dialogo WPF, si sta utilizzando la HwndSource class per avvolgere la finestra di WPF? In tal caso, potresti essere in grado di :: SetParent la finestra di WPF e utilizzare la proprietà HwndSource.Handle per impostare il genitore del figlio secondario.

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