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 :

MFC et multifenetrage


Sujet :

MFC

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Par défaut MFC et multifenetrage
    Voila, je voudrais que mon application demarre en premier lieux en demandant un login et un mot de passe, j'ai donc creer une fenetre dialogue.

    Est il possible, que lorsque l'on clique sur OK, si le mot de passe est bon cela ouvre une autre fenetre, et sinon ca reviens a la fenetre en incluant une phrase ?

  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,

    Oui, c'est possible. Bien sûr !
    Si ta première boîte de dialogue a été ouverte avec DoModal, tu ne pourras pas utiliser la même, vu qu'elle a été détruite au moment du clic sur le bouton "Ok". Mais tu peux afficher une autre instance de cette boîte de dialogue en mode modal, en utilisant un accesseur de façon à ce qu'elle sache qu'il faut afficher un message supplémentaire. De la même façon, tu peux ouvrir une autre fenêtre si le mot de passe est correct. Mais dans ce cas, tout dépend si tu es dans un contexte MDI, SDI ou de boîte de dialogue...

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Par défaut
    Quand je clique sur Ok, ca ne m'ouvre la fenetre, mais ca me la ferme direct ... tout en gardant la fenetre d'identification ouverte ... Je comprend pas ...

    Est il possible de recuperer les valeur des champs d'une boite de dialogue? comment?

  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
    J'ai rapidement regardé ton code (avant que tu ne le retires de ton message précédent). Il me semble que la fin de la méthode CRFIDApp::InitInstance devrait plutôt se présenter comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if (dlg.DoModal() == IDOK)
    		return CreateMainFrame();
     
    	return FALSE;
    }
    Pour récupérer la valeur d'un champ d'une boîte de contrôle affichée avec DoModal, il faut utiliser un accesseur publique qui permet de renvoyer cette valeur. Le problème est qu'on n'a plus accès aux contrôles de la boîte de dialogue après l'exécution de DoModal du fait que la boîte de dialogue est alors détruite. Il faut donc ruser en stockant cette valeur dans un membre de type CString, soit au moment de la fermeture de la boîte de dialogue, soit au moment où la valeur du champs est modifiée.

    Dans ton cas et dans le cas d'un CEdit, le plus simple est d'associer une variable de type CString au contrôle, de mettre un accesseur publique sur cette variable et de mettre cette variable à jour dans la méthode événementielle du clic sur le bouton "Ok" à l'aide de la méthode UpdateData.

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Par défaut
    Pas compris la ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Par défaut
    Bon, actuellement j'ai ca :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    BOOL CProjetApp::InitInstance()
    {
    	AfxEnableControlContainer();
     
    	// Standard initialization
    	// If you are not using these features and wish to reduce the size
    	//  of your final executable, you should remove from the following
    	//  the specific initialization routines you do not need.
     
    #ifdef _AFXDLL
    	Enable3dControls();			// Call this when using MFC in a shared DLL
    #else
    	Enable3dControlsStatic();	// Call this when linking to MFC statically
    #endif
     
    	// Change the registry key under which our settings are stored.
    	// TODO: You should modify this string to be something appropriate
    	// such as the name of your company or organization.
    	SetRegistryKey(_T("Local AppWizard-Generated Applications"));
     
    	CLogin login;
    	//	CDatabase db;
    	//	char  source[] ="DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;PORT=3306;DATABASE=RFID;USER=root;PASSWORD=;OPTION=0;";
     
    //	if (db.connect(source))
    //	{
    		if(login.DoModal() == IDOK)
    		{
    			m_Login = login.m_Login;
    			m_Password = login.m_Password;
    		}
    		else 
    		{
    			return -1;
    		}
    		CVerification Verif;
    		Verif.Create(IDD_CheckLaptopOwner, NULL);
    		Verif.ShowWindow(SW_SHOW);
    		Verif.SetFocus();
     
    //	}
    	return false;
    }
    Et quand je lance, ca m'affiche la premiere fenetre, et des que je fais ok, tout se ferme ...comment faire?

  7. #7
    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 ce ne serait pas lié au return false qui est à la fin de ta méthode ? Moi, j'écrirais la fin de cette méthode de la façon suivante :
    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
     
    	(...)
     
    	if (login.DoModal() != IDOK)
    		return FALSE;
     
    	m_Login = login.m_Login;
    	m_Password = login.m_Password;
    	CVerification Verif;
    	Verif.Create(IDD_CheckLaptopOwner, NULL);
    	Verif.ShowWindow(SW_SHOW);
    	Verif.SetFocus();
     
    	return TRUE;
    }
    Est-ce délibéré de ta part d'afficher la boîte de dialogue CVerification en mode non modal ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Par défaut
    ca fais pareil ...

  9. #9
    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 que fait le dégogueur quand tu mets un point d'arrêt au début de cette méthode ?

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Par défaut
    Il passe par plein de fonction ..

    Comment faire pour creer la fenetre autrement qu'en modal ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Par défaut
    ok ... c'est bon, ca marche quand je creer en DoModal

  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
    Ah ! La voilà l'erreur !
    Pour afficher une boîte de dialogue en mode non modal, il faut faire presque comme tu as fait avec CVerification. Je dis presque, car il ne faut pas utiliser une simple variable mais un pointeur. Cf. la FAQ...
    Ton code deviendrait donc :
    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
     
    	(...)
     
    	if (login.DoModal() != IDOK)
    		return FALSE;
     
    	m_Login = login.m_Login;
    	m_Password = login.m_Password;
    	CVerification *pVerif;
    	pVerif->Create(IDD_CheckLaptopOwner, NULL);
    	pVerif->ShowWindow(SW_SHOW);
    	pVerif->SetFocus();
     
    	return TRUE;
    }

  13. #13
    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 Kassar Voir le message
    ok ... c'est bon, ca marche quand je creer en DoModal
    Ca ne m'étonne pas. Je ne comprenais pas l'intérêt d'afficher cette boîte de dialogue de façon non modale alors que c'était la seule à se trouver affichée par l'application.

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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