Pergunta

Eu estou adicionando diálogos C # WPF para um aplicativo C ++ MFC existente, usando uma camada de interface C ++ / CLI. Tenho coisas úteis, excepto eu estou tendo um problema com modalidade. Por exemplo:

  1. MFC aplicativo mostra um WPF diálogo usando ShowDialog. Obras como esperado.
  2. , que mostra de diálogo WPF um MFC diálogo usando DoModal. O diálogo WPF está escondido por trás do aplicativo de base C ++, e não é desativado a menos que eu alterar manualmente IsEnabled. Não é o ideal, mas funciona.
  3. Agora, esse diálogo MFC está fechado. Agora, por algum motivo a base aplicativo MFC é ativado, quando ele ainda deve ser desativado devido à WPF não Caixa de diálogo ter sido fechado. Isso é ruim, já que agora permite que o usuário a fazer coisas malucas enquanto o diálogo WPF ainda está aberta.

Eu tenho um sentimento de que ele iria trabalhar melhor se eu pudesse definir diálogos pais corretamente. Mas até agora eu não reembolsaram foi capaz de definir pai de um diálogo MFC como um diálogo WPF, ou vice-versa. E, eu nem sei se isso iria consertá-lo.

Todas as idéias?

Foi útil?

Solução

Ao abrir um CDialog, o truque é usar um WindowsInteropHelper para obter HWND do diálogo WPF pai. Então, você pode usar CWnd :: Attach para embrulhar que HWND em uma classe CWnd para passar para o construtor do CDialog.

O problema que tive foi que eu já tinha o CDialog construído., Mas ainda não exibido. As várias versões do SetParent só pode ser usado se o seu janela filho-alvo já tem um identificador válido. Eu tive que escrever uma nova função na minha classe CDialog para definir m_wndParent, que é o que ele usa como o pai quando ele finalmente cria o diálogo. Então, tudo funciona muito bem!

De alguma forma criando diálogos WPF a partir de diálogos MFC "simplesmente funciona". É mágico.

Outras dicas

Ao mostrar a janela do WPF, você está usando o classe HwndSource para quebrar a janela WPF? Se assim for, você pode ser capaz de :: SetParent a janela WPF, bem como usar a propriedade HwndSource.Handle para definir pai do sub-criança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top