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

MFC Discussion :

Ajout dynamique d'un contrôle à une fenêtre


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Points : 14
    Points
    14
    Par défaut Ajout dynamique d'un contrôle à une fenêtre
    Comment ajouter un contrôle dynamiquement ? Par exemple, un bouton à ma CFormView ou CDialog.

    J'ai cherché des méthodes

    Ce qui se fait généralement, c'est d'ajouter un contrôle ID_MON_CONTROLE à la CFormView ou à la CDialog lors de la conception, puis de déclarer un champ m_MonContrôle dans une classe dérivant de CWnd, et ensuite de le rattacher à la ressource ID_MON_CONTROLE, dans une méthode d'initialisation de cette fenêtre à l'aide de la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BOOL SubclassDlgItem( UINT nID, CWnd* pParent );

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    attention la fonction SubclassDlgItem permet de rattacher manuellement sans l'aide de dodataexchange et UpdateData une variable controle à son controle . (voir faq sur UpdateData).
    donc rien a voir avec la creation dynamique d'un controle.
    Pour créer dynamiquement un control il faut passé par la fonction create de la classe associée.
    Exemple sur un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Create a push button.
    myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 
       CRect(10,10,100,30), pParentWnd, 1);
    [/code]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    D'accord.

    Mais une fois mon contrôle créé (par ex 1 bouton : MonBouton), si je veux le rajouter dynamiquement à une fenêtre (par 1 CFormView : CMyFormView créée avec le wizard), y-a-t-il 1 fonction spéciale ? J'ai cherché ds la doc MFC, mais rien trouvé.

    En gros, ce que je voudrais faire, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void CMyFormView::OnInitialUpdate() {
     
    /* ... */
     
    // Create a push button. 
    myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 
       CRect(10,10,100,30), pParentWnd, 1); 
     
    // Je rajoute le bouton dynamiquement ;
    addMyBouton();
     
    /* ... */
    }
    Est-ce que tu vois je veux dire ?

  4. #4
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 102
    Points : 111
    Points
    111
    Par défaut
    Remplace pParentWnd par this dans ta fonction Create. Ton bouton sera automatiqué associé à ta vue.
    501darts

    Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    J'ai tapé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CEssaiFormView::OnInitialUpdate() {
     
    /*...*/
     
    CButton button;
    // Create a push button. 
    button.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1); 
     
    /*...*/
    }
    Mais malheureusement mon bouton ne s'affiche pas.

    Alors, j'ai rajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    button.ShowWindow(SW_SHOWNORMAL);
    Mais mon bouton ne veut pas apparaitre.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    il faut veillé a la persistance de la variable sinon le contrôle est détruit immédiatement en sortie de fonction !
    La variable bouton doit faire partie des données membres de la classe fenêtre parent.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Ca marche !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/01/2011, 10h07
  2. Réponses: 2
    Dernier message: 02/01/2011, 09h46
  3. ajout dynamiques d'icones dans une forme
    Par a.sana dans le forum C#
    Réponses: 1
    Dernier message: 29/04/2009, 10h12
  4. Réponses: 5
    Dernier message: 07/08/2007, 10h10

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