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

C++ Discussion :

Win32 : GetAncestor() et IsChild()


Sujet :

C++

  1. #1
    Membre confirmé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Points : 528
    Points
    528
    Par défaut Win32 : GetAncestor() et IsChild()
    Bonjour tout le monde,

    je cherche à récupérer deux handles de fenêtres windows et à faire en sorte que l'une d'entre elle soit enfant de l'autre. Cependant, je rencontre quelques problèmes de compréhension sur ce test. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <iostream>
     
    #include <Windows.h>
     
    using namespace std;
     
    int main()
    {
      static LPCTSTR szWindowClass = TEXT("CalcFrame");
      HWND calc = FindWindow(szWindowClass, NULL);
     
      static LPCTSTR szWindowClass2 = TEXT("Notepad");
      HWND notepad = FindWindow(szWindowClass2, NULL);
     
      static LPCTSTR szWindowClass3 = TEXT("Desktop");
      HWND desk = FindWindow(szWindowClass3, NULL);
     
      cout << "desk : " << desk << endl;
     
      cout << "calc : " << calc << endl;
      cout << "notepad : " << notepad << endl;
     
      cout << "parent calc : " << GetParent(calc) << endl;
      cout << "GetWindow(calc, GW_OWNER) : " << GetWindow(calc, GW_OWNER) << endl;
      cout << "GetAncestor(calc, GA_PARENT) : " << GetAncestor(calc, GA_PARENT) << endl;
     
      cout << "parent notepad : " << GetParent(notepad) << endl;
      cout << "GetWindow(notepad, GW_OWNER) : " << GetWindow(notepad, GW_OWNER) << endl;
      cout << "GetAncestor(notepad, GA_PARENT) : " << GetAncestor(notepad, GA_PARENT) << endl;
     
      cout << "------------" << endl;
     
      HWND res = SetParent(notepad, calc);
     
      cout << "res (SetParent(notepad, calc) : " << res << endl;
     
      cout << "parent notepad : " << GetParent(notepad) << endl;
      cout << "GetWindow(notepad, GW_OWNER) : " << GetWindow(notepad, GW_OWNER) << endl;
      cout << "GetAncestor(notepad, GA_PARENT) : " << GetAncestor(notepad, GA_PARENT) << endl;
     
      cout << "IsChild(calc, notepad) : " << IsChild(calc, notepad) << endl;
     
      cout << "------------" << endl;
     
      HWND newRes = SetParent(notepad, desk);
     
      cout << "newRes (SetParent(notepad, desk) : " << newRes << endl;
      cout << "GetAncestor(notepad, GA_PARENT) : " << GetAncestor(notepad, GA_PARENT) << endl;
     
      return 0;
    }
    Je me rends compte alors de plusieurs choses :

    - le handle de mon Desktop n'est pas retrouvé au départ.
    - GetParent et GetWindow(*, GW_OWNER) me retournent 0x0 contrairement à GetAncestor qui retourne le bon handle du parent avant et après un SetParent().
    - Même si GetAncestor renvoit un handle correct, un IsChild() de l'enfant juste après me retourne 0x0.. La méthode serait liée au owner plus qu'au parent ?
    - Enfin, on pourrait imaginer que certaines fenêtres windows ne peuvent s'utiliser comme conteneur d'autres fenêtres comme la calculette ... (je n'y crois pas trop mais c'est une hypothèse). Qu'en pensez-vous ?


    Auriez-vous des idées ? Je pense que j'ai un problème de compréhension.

    Merci beaucoup
    Images attachées Images attachées  

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. [Kylix] kylix3 ----> win32
    Par blue dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 11h27
  3. gcc et win32
    Par MatRem dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 16/01/2003, 12h22
  4. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38
  5. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

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