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 :

Paramétrer l'appel d'une dialog ou d'une autre ?


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut Paramétrer l'appel d'une dialog ou d'une autre ?
    bonjour,

    je voulais s'il était possible pour un projet dialog-based de charger une IHM ou une autre ?
    Je m'explique :
    pour un besoin de mon entreprise, il faudrait selon un paramètre, que ma boite de dialogue principale soit disposée d'une manière ou d'une autre avec une taille différente.
    Donc ce que j'ai fait pour l'instant, dans la partie ressource / dialog, j'ai inséré une copie de ma dialog, que j'ai modifié (disposition des controles, taille des controles, textes de certains statics, ..., mais je les ai tous gardé). Pour la création de la copie de dialog, j'ai gardé le même ID, et j'ai rajouté une condition (comme le demande VC++).

    Donc ce que je voudrais faire, c'est au lancement de l'appli, appeler une ou l'autre de mes dialog, selon un paramètre.

    Est-ce que c'est possible ?
    J'ai pas encore trouvé !

  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
    Par défaut
    salut ,
    une solution simple et facile a mettre en oeuvre la dll de ressources regarde mon post dans le post it de la faq sur le sujet.
    http://www.developpez.net/forums/vie...210467#1210467

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    ok, en tout cas merci beaucoup pour le tuyau,
    désolé je n'avais pa vu ça dans la faq !

    par contre cela m'oblige à générer une dll pour chaque dialog ?
    Si c'est la seule solution, OK !

    ps : en étant sous XP, je n'ai pas réussi à tester ton exemple (je ne sais pas comment mettre la condition [Language] SetInFr=1 dans la base de registre)

  4. #4
    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
    Par défaut
    salut,
    non la dll contiendra toutes les ressources .
    relis bien le post tu copies tout les fichiers .rc le repertoire res etc...
    j'ai pas compris ton pb avec mon exemple tu la telechargé ?
    je suis aussi sur xp l'info n'est pas stockée dans la base de registre mais dans le .ini du programme vu que j'ai mis la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //SetRegistryKey(_T("Local AppWizard-Generated Applications"));
    en commentaire.....


  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    oui je l'ai téléchargé,
    j'ai alors crée un TestResDll.ini dans le répertoire courant avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [Language]
    SetInFr=1
    y a-t-il une erreur ?

    Sinon ce que je vois, c'est que le projet TestResDll a pour ressource
    la form IDD_TESTRESDLL_FORM en anglais, et que le projet DLL ResDllFr a pour ressource la form IDD_TESTRESDLL_FORM en francais.
    Donc j'ai pensé que si on voulait utiliser la langue anglaise, on gardait la form IDD_TESTRESDLL_FORM en anglais, et que si on voulait utiliser du francais, on chargait la DLL qui contient IDD_TESTRESDLL_FORM en francais.
    Mais si on l'avait voulu en espagnol, je ne vois pas comment, a part faire une autre DLL qui contient une IDD_TESTRESDLL_FORM en espagnol (ResDllEs.DLL), on aurait pu faire pour charger la bonne IDD_TESTRESDLL_FORM, puisque tu me dis qu'une DLL contenant toutes les ressources est suffisante.

  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
    Par défaut
    re,
    j'ai fais un exemple simple...
    je n'ai pas toucher au parametrage de la langue dans les ressources.
    j'ai juste considerer que une dll == une langue .

    par defaut dans l'exemple les ressources d'origines sont en anglais et on charge suivant le flag SetInFr la dll en francais .
    si il y a 10 langues supplementaitres on fait 10 dll et on se debrouille a charger la dll qui correspond en fonction d'un parametrage quelconque .(point ini, arguement etc) .
    les id des ressources sont identiques d'une dll a l'autre.
    sinon ça ne fonctionnera pas .

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Ok,

    j'aurais aimé trouver un moyen, mais visiblement cela n'existe pas (ou ne marche pas) de faire dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CPadDlg::CPadDlg(CWnd* pParent /*=NULL*/)
    //	: CDialog(CPadDlg::IDD, pParent)
    {
    	if(parametre)
                       CDialog(IDD_DIALOG_MINI, pParent);
                    else
                       CDialog(IDD_DIALOG_MAXI, pParent);
     
    	//{{AFX_DATA_INIT(CPadDlg)
    	//}}AFX_DATA_INIT
    	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    vu qu'on peut pas faire comme ça, je vais passer par ta méthode.

    La seule chose qui me gêne, c'est que je vais devoir faire une DLL pour chaque IHM différente ...

  8. #8
    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
    Par défaut
    re,
    avec ma solution tu crees un dll de ressources certes (ça prend < 5 mn) apres le chargement de la dll au depart tu n'as plus rien a faire .....
    si tu as 50 fenetres tu as juste besoin de modifier la ressource .
    mais pas le code d'appel...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    mais ta solution est excellente,
    et dailleurs je viens de la mettre en oeuvre, et ça marche trés bien !
    (j'avais juste oublié de renommer les ressources copiées, du coup on ne les voyait plus, donc j'en ai eu pour un plus de 5mn ).
    Merci beaucoup ce tuyau.

    Je regrète juste qu'on ne puisse pas écrire un truc de ce style : (ce qui contraint à "charier" autant de DLL que d'IHM avec l'éxécutable)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CPadDlg::CPadDlg(CWnd* pParent /*=NULL*/) 
    //   : CDialog(CPadDlg::IDD, pParent) 
    { 
       if(parametre) 
          CDialog(IDD_DIALOG_MINI, pParent); 
       else 
          CDialog(IDD_DIALOG_MAXI, pParent); 
     
       //{{AFX_DATA_INIT(CPadDlg) 
       //}}AFX_DATA_INIT 
       // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
       m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
    }
    et d'ailleurs je ne comprends pas pourquoi on ne peut pas le faire !


    En même temps je me dis que lorsque l'on télécharge des "skins" pour un logiciel, on télécharge certainements des DLL

    En tout cas je te répète un grand merci pour cette solution !

  10. #10
    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
    Par défaut
    d'ailleurs pour infos c'est la solution retenue pour le logiciel filezilla ....
    vive les skins

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    en connais-tu d'autres ?

    un code comme celui que j'ai donné ci-dessus ne peut-il être bidouillé pour que ça marche ?

  12. #12
    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
    Par défaut
    re,
    une solution possible
    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
     
     class CPadDlg : public CDialog
    {
    // Construction
    public:
    	CPadDlg(UINT nRes=IDD_DIALOG_MINI,CWnd* pParent = NULL);   // standard constructor
     
    // Dialog Data
    	//{{AFX_DATA(CTestDlgNoModal)
    	enum { IDD = IDD_DIALOG_MINI };
    .....
    };
    CPadDlg::CPadDlg(UINT nRes,CWnd* pParent /*=NULL*/)
    	               : CDialog(nRes, pParent)
    {
    	//{{AFX_DATA_INIT(CPadDlg)
    		// NOTE: the ClassWizard will add member initialization here
    	//}}AFX_DATA_INIT
    }
     
    CPadDlg Dlg(parametre?IDD_DIALOG_MINI:IDD_DIALOG_MAXI, 
                       Parent);
    Dlg.DoModal();
    voila .....

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Dans mon cas présent, j'ai finalement cette dernière solution,
    mais j'avoue que pour d'autres appli, la 1ere me sera trés utile.

    Encore merci !

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

Discussions similaires

  1. Association d'une dialog box a une classe avec visual studio 2012
    Par tonycalv dans le forum Développement Windows
    Réponses: 0
    Dernier message: 26/12/2014, 01h53
  2. Réponses: 1
    Dernier message: 12/12/2011, 10h07
  3. Copier une table Access d'une base de données à une autre
    Par Marie S. dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/05/2007, 12h09
  4. Réponses: 11
    Dernier message: 06/12/2005, 08h23
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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