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 :

création dynamique d'un control


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut création dynamique d'un control
    Coucou à tous

    Je dois faire une application qui créer X control STATIC.
    X étant le nombre que souhait l’utilisateur de cette application.
    Bien que la compilation soit correcte, il m’est impossible de lancer l’application.

    voici le code que j'utilise:
    CStatic *pStat=new CStatic;
    pStat->Create("nom",WS_CHILD|WS_VISIBLE|SS_CENTER,CRect(10,20,5,10),this->GetParent());
    CRect rect;

    ScreenToClient(&rect);
    pStat->SetWindowPos(NULL, rect.left, rect.top, 0, 0,
    SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );
    pStat->EnableWindow(TRUE);

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    deja quand je vois cette ligne la je me dit que tu l'inclus dans le ^parent de la classe courante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pStat->Create("nom",WS_CHILD|WS_VISIBLE|SS_CENTER,CRect(10,20,5,10),this->GetParent());
    je penses que tu veux en fait indique que this est le parent. De plus, tu ne specifies pas d'identifiant !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    pour ce qui est du parent ok .
    mais pour l'ID je me sens un peu perdu car comment je peut mettre un ID si je n'ai pas encore créer le control?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    L'ID est spécifié à la création.
    généralement, on définit l'ID soi-même dans un header, ou on en force un dans resource.h si on en a un...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    Oui, pour ça je suis d'accord, mais mon problème est que ma création de control est dynamique.
    Est que je peux me permette de rajouter n'importe quel ID alors que se sera l'utilisateur de l'application qui déterminera le nombre de control crée?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Si j'ai bien compris, tu cherches à faire une fonction de bibliothèque pour la création d'un certain nombre de contrôles.

    Pour cela, tu peux toujours demander à ce que l'on passe en paramètre un tableau d'IDs, ou encore un ID qui sera incrémenté à chaque contrôle...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    OK j'ai plus d'erreur
    mais ma boite de dialogue reste vide
    En faite pour être plus précis, j'ai un fichier INI dans lequel j'ai diverses informations.
    Je dois afficher dans des contrôles STATIC ces informations.
    Le nombre de contrôle STATIC va donc dépendre du nombre d'information dans le fichier INI.
    Et c'est dans la fonction "onInitDialogue" que je crée mes contrôles STATIC.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu dois les modifier par la suite, ou c'est juste pour un bête affichage?

    Sinon, ils peuvent tous avoir l'ID IDC_STATIC et on n'en parle plus...

    On peut avoir un aperçu du code de OnInitDialog() ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    BOOL CBanc_testDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    }

    // Set the icon for this dialog. The framework does this automatically
    // when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE); // Set big icon
    SetIcon(m_hIcon, FALSE); // Set small icon

    // TODO: Add extra initialization here

    //lectur du fichier ini
    int nombrefonction;

    nombrefonction =atoi(AfxGetApp()->GetProfileString("Start","nombrefonction"));

    CString *nomfonction= new CString[nombrefonction];
    CStatic *stat;
    CString nom;
    CString ind;

    for(int i=1; i<=nombrefonction; i++)
    {

    stat= new CStatic();
    ind.Format("%d",i);
    nom="fonction"+ind;
    nomfonction[i-1]=AfxGetApp()->GetProfileString("Nom",nom);
    stat->Create(nomfonction[i-1],WS_CHILD|WS_VISIBLE|SS_CENTER,CRect(10*i,20*i,5,10),this,1000+i);
    }
    UpdateData(TRUE);

    return TRUE; // return TRUE unless you set the focus to a control
    }

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    1. Tu n'as pas répondu à ma première question du post précédent.
    2. J'ai pas l'habitude de la création dynamique en MFC
    3. Vérifie les chaînes obtenues par GetProfileString(). Au besoin, rajoute une chaîne non-vide en troisième paramètre.
    4. Vérifie le retour de Create(). En cas de besoin, un petit GetLastError()+FormatMessage()...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    désolé
    c'est juste pour de l'affichage de ce qui se trouve du Fichier INI.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    Pour ce qui est de la lecture du fichier INI c'est OK.
    La fonction CREAT(...) retourne une valeur correcte.
    Et le test m'indique que l'opération est réussie.
    cette fois je suis entièrement paumée

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Jette un coup d'oeil avec spy++ pour voir si les contrôles existent ou non...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    oui ils existent

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Eh Bien, regardent leurs styles, coordonnées, caption...
    Tout ce qui peut faire qu'ils n'apparaissent pas...

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    c'est bon ça s'affiche
    c'etait un problème de taille des STATIC, je les faisais trop petites
    merci.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    désolé, il y a de nouveau un petit souci...
    Mes 3 premiers STATIC sont correctement afficher, mais les autres non.
    Ce n'est pas un problème de taille de la boite de dialogue à première vue.
    J’ai vérifié avec SPY++ et ils ont bien été crée mais leur hauteur est nulle.

    voici les lignes de code que j'utilise pour les créer:
    //lectur du fichier ini
    int nombrefonction;
    int hauteur=300;
    int largeur=500;

    nombrefonction =atoi(AfxGetApp()->GetProfileString("Start","nombrefonction"));
    hauteur=hauteur+100*nombrefonction/10;
    largeur=largeur+300*nombrefonction%10;

    SetWindowPos(&CWnd::wndTop,300,100,largeur,hauteur,NULL );

    CString *nomfonction= new CString[nombrefonction];
    CStatic *stat;
    CString nom;
    CString ind;
    int verif;

    for(int i=1; i<=nombrefonction; i++)
    {
    stat= new CStatic();
    ind.Format("%d",i);
    nom="fonction"+ind;
    nomfonction[i-1]=AfxGetApp()->GetProfileString("Nom",nom);
    verif=stat->Create(nomfonction[i-1],WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(50,20*i,300,100),this,1000+i);
    }

    UpdateData(FALSE);

    return TRUE;
    Si ça marche pour les 3 premières pour quoi pour les autres non

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

Discussions similaires

  1. Probleme de création dynamique de controles
    Par zalalus dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/09/2007, 15h41
  2. Réponses: 10
    Dernier message: 27/06/2007, 10h04
  3. vba/création dynamique control
    Par sefir dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/06/2007, 17h41
  4. Création dynamique control à partir d'une string
    Par J@ckHerror dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/03/2007, 05h22
  5. [VB6] création dynamique d'un controle
    Par rodymary dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/09/2006, 19h49

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