2010-11-24 4 views
4

J'ai une ancienne application C++ win32, et l'étendre en utilisant wpf windows fonctionne. Mais ce que je veux faire est d'avoir une fenêtre WPF en tant que fenêtre principale, et pas seulement une vieille fenêtre mais une fenêtre shell prism. Donc, pour mon projet C++ existant, je veux ajouter un Bootstrapper, une fenêtre shell, un chargeur MEF, tous les cloches et les sifflets. Et là, je veux mettre quelques commandes qui ouvrent les fenêtres Win32 hérités quand ils sont nécessaires.Hébergement Win32 Windows dans une application WPF?

maintenant d'ouvrir les fenêtres WPF dans une application win32 est simple, j'ai juste besoin d'utiliser

System::Windows::Forms::Integration::ElementHost::EnableModelessKeyboardInterop(mywindow); 

Mais comment puis-je ouvrir une fenêtre win32 dans une application WPF? La fenêtre de win32 aura besoin d'une boucle de pompe de message, mais où dois-je mettre ceci:

MSG msg; 
while (GetMessage(&msg, NULL, NULL, NULL)) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 

Puis-je créer tout nouveau fil pour la boucle? Ou y a-t-il un assistant d'interopérabilité pour cela aussi?

Ou est mon idée simple fou?

+0

Il est peut-être temps de basculer l'interrupteur. Faire une application WPF votre principale. –

Répondre

5

Avez-vous vu cette How WPF uses HWNDs

?: Je recommande également lire ceci: Walkthrough: Hosting a Win32 Control in WPF

Comme vous le voyez il y a une fenêtre d'accueil qui contiendra le contrôle. La fenêtre de l'hôte peut également contenir du contenu auto-peint ou ce que vous voulez.

Vous devez remplacer WndProc de HwndHost. Peut être qu'il est possible de transmettre à votre gestionnaire natif de cela. Je n'ai pas encore fait ça.

Comme @Tergiver l'a souligné, il n'est pas nécessaire d'utiliser une pompe de message.

+0

Cool, bonne chose - mais c'est pour héberger un contrôle win32 dans une fenêtre WPF, non? Je veux ouvrir une fenêtre win32 plutôt autonome, et je ne comprends pas vraiment encore, comment cela devrait être appliqué. Mais j'ai un point de départ maintenant, merci! – Sam

+0

Il existe également une solution pour héberger une page wpf dans un win32 hwnd sur la même page. – frast

+0

Ce qui n'est pas aussi ce que je veux réaliser :) Mais pour autant que je comprenne l'information que je n'ai pas besoin de m'inquiéter de la pompe de message, WPF gère ça !? – Sam

Questions connexes