Bonjour,
Je suis en train de faire un développement et je suis confronté à une difficulté dont je ne trouve pas la réponse sur le net.
Situation :
OS : Windows 7 64 bit
Environnement de dev : Visual Studio 2012 en C#, Framework 4.5.51209
Ce que fait l'application : Encapsule une autre application (dont je ne maitrise pas les sources) pour y ajouter des extensions (plugins).
Besoin : Définir une fenêtre parent à une fenêtre windows.
Détail :
A un moment donnée, l'application fait apparaitre un formulaire non modal.
Avec Spy++, j'apprends que la fenêtre est rattachée à la fenêtre représentant le bureau et non celle de mon application.
Pas de soucis, l'application utilisant pas mal les APIs, j'utilise l'API SetParent pour definir à ma fenêtre parent comme étant mon application.
APIWindows.SetParent(MyForm.Handle, MyApplication.Handle);
Ca ne fonctionne pas, Spy++ m'informe que ma fenêtre est restée attachée au bureau, pire, tous les objets ne sont pas dedans.
Bref, j'utilise l'autre moyen (déconseillé par Microsoft) pour definir ma fenêtre parent, à savoir SetWindowLongPtr :
APIWindows.SetWindowLongPtr(MyForm.Handle, APIWindows.WindowLongFlags.GWLP_HWNDPARENT, MyApplication.Handle);
C'est mieux puisqu'ayant définit la propriété StartPosition = CenterParent, la fenêtre se centre bien sur le centre de mon application. Je me dis que c'est gagné...
Ben non, Spy++ continue de me dire que mon formulaire est resté sur le bureau.
Après quelques lectures sur l'API sur le site de Microsoft (https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx), j'apprends qu'il faut faire un SetWindowPos afin de s'assurer que toutes modifications opérées par SetWindowLongPtr, ce que je fais immédiatement sans plus de succès
1 2 3 4 5 6
| APIWindows.SetWindowLongPtr(MyForm.Handle, APIWindows.WindowLongFlags.GWLP_HWNDPARENT, MyApplication.Handle);
APIWindows.SetWindowPos(MyForm.Handle, new IntPtr(0), 0, 0, 0, 0,
APIWindows.SetWindowPosFlags.SWP_NOMOVE|
APIWindows.SetWindowPosFlags.SWP_NOSIZE|
APIWindows.SetWindowPosFlags.SWP_NOZORDER|
APIWindows.SetWindowPosFlags.SWP_FRAMECHANGED); |
Là, je n'ai plus d'idées pour accrocher mon formulaire à mon application... Si vous vous en avez ou si vous savez pouquoi mes 2 methodes ne fonctionnent pas, je suis preuneur
Partager