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 :

Recherche les ID de contrôles non utilisés


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut Recherche les ID de contrôles non utilisés
    Bonjour,

    J'aimerai créer dynamiquement des contrôles. Ca ça va.
    Mais par contre vu que le nombre est variable il faut que je puisse avoir des ID dynamique qui n'existe pas déjà.

    Existe t'il une méthode pour rechercher les ID de contrôle non utilisés ?

    Merci d'avance

  2. #2
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Bonjour,

    Pourquoi ces contrôles devraient-ils avoir des identifiants qui n'existeraient pas déjà ? Les identifiants ne doivent être uniques qu'au sein d'une même fenêtre.

    Si tu travailles sur une fenêtre bien précise, rien ne t'empêche d'attribuer l'identifiant 1001 au premier contrôle créé dynamiquement, puis le 1002 au second...

  3. #3
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    C'est bien ça mais je voudrais être sur que l'ID 1000, 1001, 1002 ne sont pas pris.

    J'avais entendu parler d'un bout de code qui permettait de récupérer un ID non utilisé. C'est justement ça que je voudrais.

    Cette fonction me retournerait justement 1000, 1001, 1002, ...

  4. #4
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Tu veux dire pas pris dans ta fenêtre ?
    Tu utilises des contrôles issus des ressources et d'autres que tu ajoutes dynamiquement ?
    Si tu n'utilises que des contrôles dynamiques, tu peux très bien utiliser un simple compteur dans ta fenêtre...

  5. #5
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Effectivement c'est un mélange entre les ids de ressources et des ids dynamique

  6. #6
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Ah OK ! Je comprends mieux.

    Et tu ne pourrais pas faire un test au moment d'attribuer l'identifiant de la ressource d'un nouveau contrôle avec GetDlgItem ? Si la ressource est déjà utilisée dans ta fenêtre, tu essayes avec un autre identifiant jusqu'à tomber sur un qui n'est pas utilisé ?

  7. #7
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Je viens de faire le test mais ça ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UINT CGridCtrlEx::GetNewWndId( CWnd * pWnd )
    {
    	for ( int i = 1; i < MAXUINT_PTR ; i++ )
    	{
    		if ( pWnd->GetDlgItem ( i ) == NULL )
    			return i;
    	}
     
    	return MAXUINT_PTR;
    }
    J'ai toujours 1 comme retour.

  8. #8
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Et tu es sûr que la valeur 1 est anormale ? Normalement, ça voudrait dire qu'aucune ressource dont l'identifiant est 1 n'est dans la fenêtre. Ça ne me paraît pas anormal...

  9. #9
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Dans les fichiers resource.h des projets MFC, il y a des constantes qui indiquent quel est l'identifiant suivant disponible pour une ressource. Peut être que tu peux t'en servir à l'exécution comme base de départ pour les identifiants de tes nouveaux contrôles?

  10. #10
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Dans les fichiers resource.h des projets MFC, il y a des constantes qui indiquent quel est l'identifiant suivant disponible pour une ressource. Peut être que tu peux t'en servir à l'exécution comme base de départ pour les identifiants de tes nouveaux contrôles?
    Ouh la la ! J'en déconseille l'utilisation, vu tous les problèmes que ces "constantes" me donnent. Elles ne sont pas du tout fiables !

  11. #11
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    PetitPapaNoël:
    Je ne suis pas sur mais c'est moi qui déconnait car je crois que ça marchait mais je ne le voyais pas.
    Maintenant je pars de MAXINT_PTR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UINT CGridCtrlEx::GetNewWndId( CWnd * pWnd )
    {
    	for ( int i = MAXINT_PTR - 1; i >= 0; i-- )
    	{
    		if ( pWnd->GetDlgItem ( i ) == NULL )
    			return i;
    	}
     
    	return MAXUINT_PTR;
    }
    spoutspout:
    Non je ne peux car je les CWnd ne sont pas créer dans le même objet. Et ils ne sont pas sensés communiquer.
    En plus le principe c'est que ce soit entièrement dynamique.

  12. #12
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Normalement, partir de 1 ou de MAXINT_PTR - 1 ne doit pas changer grand chose : cette méthode doit te renvoyer un identifiant de ressource qui n'est pas utilisé dans la fenêtre.

    Bien entendu, cette méthode doit être appelée après un premier passage dans DoModal()...

  13. #13
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Effectivement il faut que le CWnd soit déjà créer et avoir un HWND.

  14. #14
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Est-ce que ça marche, alors ?

  15. #15
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    A oui pardon, oui c'est bon marche impec.

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

Discussions similaires

  1. CRM V4 : masquer les attributs non utilisés dans les recherches avancée
    Par Marie40200 dans le forum Microsoft Dynamics CRM
    Réponses: 0
    Dernier message: 27/02/2014, 10h02
  2. [AC-2007] Comment rechercher les objets non utilisés dans une application
    Par Triton972 dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/12/2011, 05h45
  3. [AC-2003] Rechercher les champs les plus utilisés
    Par chicabonux dans le forum Access
    Réponses: 7
    Dernier message: 02/05/2010, 15h18
  4. lister les fichiers non utilisés
    Par need2learn dans le forum Apache
    Réponses: 2
    Dernier message: 30/11/2008, 21h36
  5. Réponses: 2
    Dernier message: 04/05/2007, 10h55

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