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

Dev-C++ Discussion :

[control identifiers] Gestion des messages


Sujet :

Dev-C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut [control identifiers] Gestion des messages
    Salut à tous,

    J'utilise Dev-C++ avec l'API Windows.
    Je crée des composants avec la fonction CreateWindow.
    Je voudrais gérer le clic sur les boutons.
    Il existe deux méthodes à ma connaissance : via le handle du control, ou via l'identifiant (Un entier utilisé sous visual studio, en général sous la forme IDC_MON_BOUTON).

    Dans la boucle de gestion des messages, je n'arrive pas à comparer le handle compris dans le message et le handle récupéré lors de la création du bouton, ce dernier étant dans un autre bloc. Il faudrait donc utiliser une variable ou un pointeur global initialisé avec le handle du bouton, juste après sa création, mais il y a surement une manière plus propre de coder.

    La plupart des fonction de l'API windows utilise l'identifiant du control pour agir dessus. LOWORD(wParam), dans la boucle de gestion des messages, retourne cet identifiant. Je ne trouve pas comment attribuer un identifiant à un control, et on dirait que cet identifiant est par défaut à 0, donc tous mes controls ont le meme ID...

    Comment gérez vous les messages envoyés par les boutons?
    Savez vous comment attribuer un identifiant à un control?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut
    Bon j'ai fini par trouver...

    Pour ceux que ça intéresse, voici comment créer et utiliser des composants.

    Pour chaque composant, il faut définir un entier qui l'identifiera, par exemple avec une enum.

    Ensuite, il faut appeler la fonction CreateWindow pour chaque composant après avoir créé la fenêtre mère, et stocké le handle retourné dans une variable dédiée.

    enfin, pour gérer les clics sur les boutons et autre message des composants, on ajoute dans la boucle de gestion des message le cas WM_COMMAND, dans lequel on place un switch (emboité dans celui déja présent).
    Ce switch doit tester LOWORD(wParam) pour connaitre le composant source du message : ça doit correspondre avec l'ID (int) dédié...

    Voici quelques asmples de code...

    un bouton et une edit box :

    dans un fichier header inclus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    enum controlsID {IDC_BUTTON, IDC_EDIT}
    Apres l'appel de CreateWindow de la fenêtre principale, ou à la réception du message WM_CREATE :
    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
     
               // création Edit
               HWND hName = CreateWindow(
               "EDIT", // type edit
               NULL,   // champ vide par défaut
               WS_CHILD | WS_VISIBLE | ES_LOWERCASE | WS_BORDER,        // composant de la fenêtre, visible, force la casse minuscule
               100,      // x
               10,      // y
               120,      // width,
               20,      // height,
               hwnd,    // parent
               (HMENU)IDC_EDIT,   // identifiant (cf header)
               ((LPCREATESTRUCT)lParam)->hInstance,     // hInstance
               NULL                                     // pas de paramètre à passer
               );
     
               // création Bouton Ok
               HWND hOk = CreateWindow(
               "BUTTON", // type bouton
               "&Ok",   // Texte du bouton
               WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
               160,      // x
               70,      // y
               60,      // width,
               25,      // height,
               hwnd,    // parent
               (HMENU)IDC_BUTTON,   // identifiant (cf header)
               ((LPCREATESTRUCT)lParam)->hInstance,     // hInstance
               NULL                                     // pas de paramètre à passer
               );
    Dans la boucle de gestion des messages, à la réception d'un message WM_COMMAND :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    switch(LOWORD(wParam)){
      case IDC_BUTTON:
        GetDlgItemText(hwnd, IDC_EDIT, buffer, 16);
        MessageBox(NULL,"Contenu du Edit récupéré dans la variable buffer.","clic sur le bouton",0);
      break;
     
    }
    Ca devrait marcher...

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/09/2010, 10h08
  2. [GUI] Gestion des messages d'erreurs
    Par agent007se dans le forum C++
    Réponses: 11
    Dernier message: 28/07/2006, 20h52
  3. gestion des messages d'erreurs
    Par keibenoit dans le forum Access
    Réponses: 2
    Dernier message: 31/05/2006, 14h49
  4. [debutant]gestion des messages des exceptions
    Par maxvador dans le forum Langage
    Réponses: 4
    Dernier message: 03/02/2006, 14h55
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25

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