IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Définir une fenêtre parent à une fenêtre windows


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 185
    Points : 167
    Points
    167
    Par défaut Définir une fenêtre parent à une fenêtre windows
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Ça me dépasse un peu mais bon, il me semble que tu n'a pas modifier le style de WS_CHILD avant d'appeler SetParent.

    https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
    if hWndNewParent is not NULL and the window was previously a child of the desktop, you should clear the WS_POPUP style and set the WS_CHILD style before calling SetParent.
    si hWndNewParent est pas NULL et la fenêtre était auparavant un enfant du bureau, vous devez effacer le style WS_POPUP et de définir le style de WS_CHILD avant d'appeler SetParent.

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/01/2012, 17h56
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo