Enregistrer une classe de fenêtre win32 personnalisée à partir de c #
J'ai une nouvelle application écrite en WPF qui a besoin de l'appui d'une ancienne API qui permet de recevoir un message qui a été posté à une fenêtre masquée. Généralement une autre application utilise la fonction FindWindow pour identifier la fenêtre masquée en utilisant le nom de ses personnalisé en classe de fenêtre.
1) je suppose de mettre en œuvre une fenêtre personnalisée classe j'ai besoin d'utiliser de l'ancienne école des appels win32?
Mon vieux c++ de l'application utilisée RegisterClass et CreateWindow de faire le plus simple possible invisible fenêtre.
Je crois que je devrais être capable de faire la même chose tout à l'intérieur de c#. Je ne veux pas que mon projet d'avoir à compiler tout le code non managé.
J'ai essayé d'en hériter du Système.De Windows.Interop.HwndHost et l'utilisation du Système.Moment de l'exécution.InteropServices.DllImport à tirer dans le ci-dessus méthodes de l'API.
Faire ce que je peux organiser avec succès un standard de fenêtre win32 par exemple "listbox" à l'intérieur de WPF.
Cependant quand je l'appelle CreateWindowEx pour ma fenêtre sur mesure, elle renvoie toujours null.
Mon appel à RegisterClass réussit, mais je ne suis pas sûr de ce que je doit être le réglage de la
WNDCLASS.lpfnWndProc membre de.
2) personne Ne sait comment faire avec succès?
source d'informationauteur morechilli
Vous devez vous connecter pour publier un commentaire.
1) Vous pouvez simplement sous-classe normale Windows Forms classe... pas besoin de tous ces appels win32, vous avez juste besoin d'analyser le WndProc message manuellement... c'est tout.
2) Vous pouvez importer le Système.De Windows.Les formes de l'espace de noms et l'utiliser avec WPF, je crois qu'il n'y aura pas de problèmes tant que vous n'avez pas s'entremêlent trop windows forms dans votre application WPF. Vous voulez juste pour instancier personnalisé de votre forme cachée d'recevrez un message est que le droit?
exemple de WndProc sous-classement:
Puisque vous savez déjà RegisterClass et tous ces appels Win32, je suppose que la WndProc message ne serait pas un problème pour vous...
Je voudrais commenter la réponse de morechilli:
Dans le constructeur, j'ai copié ci-dessus est une légère erreur: La WNDCLASS instance est créée, mais pas enregistré. Il finira par être nettoyée. Mais la WNDCLASS détient le WndProc délégué. Il en résulte une erreur dès que WNDCLASS est des ordures collectées. L'instance de WNDCLASS devrait être prise dans une variable de membre jusqu'à ce que la fenêtre est détruite.
WNDCLASS wind_class;
mettre la définition de la classe, pas la fonction, et l'incident sera résolu.