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 :

Bouton en forme de croix et fin d'une boite de dialogue


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Par défaut Bouton en forme de croix et fin d'une boite de dialogue
    Bonjour,

    J'ai un petite application avec une boite de dialogue: il n'y a pas de bouton OK sur celle-ci. Je voudrais que pour la fermer, l'utilisateur clique:
    • soit sur la croix dans la barre systeme,
    • soit il utilise un menu popmenu dans la barre d'etat de windows.

    Jusque la tout va bien et tout fonctionne.

    Mon probleme est que lorsque l'utilisateur le fait, la boite retourne l'identifiant IDCANCEL, or cela ne me semble pas tres propre puisque c'est le fonctionnement normal.

    J'ai essaye de placer la fonction EndDialog(IDOK) a plusieurs endroit mais sans succes.

    D'avance merci.

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 530
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 530
    Par défaut
    si l'appli s'appelle TestDlg et que le code source soit généré avec AppWizard il y a 2 codes sources : un général pour l'application ( TestDlgApp.cpp) et un autre pour gérer la fenêtre de dialogue.( TestDlgDlg.cpp)
    Soit surcharger CDialog::OnCancel soit modifier l'autre source dans InitInstance
    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
    BOOL CTestDlgApp::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
    
    	CTestDlgDlg dlg;
    	m_pMainWnd = &dlg;
    	int nResponse = dlg.DoModal();
    ///modifier ici comme le suggere les commentaires d'AppWizard
    	if (nResponse == IDOK)
    	{
    		// TODO: Place code here to handle when the dialog is
    		//  dismissed with OK
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// TODO: Place code here to handle when the dialog is
    		//  dismissed with Cancel
    	}
    
    	// Since the dialog has been closed, return FALSE so that we exit the
    	//  application, rather than start the application's message pump.
    	return FALSE;
    }
    Inutile d'appeler EndDialog il provoque la fermeture implicite de la fenêtre.
    C'est plutot utilisé en win32 et non projet MFC puisque cette API est cachée en quelque sorte

  3. #3
    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
    Citation Envoyé par Nicolas Bauland
    Bonjour,

    J'ai un petite application avec une boite de dialogue: il n'y a pas de bouton OK sur celle-ci. Je voudrais que pour la fermer, l'utilisateur clique:
    • soit sur la croix dans la barre systeme,
    • soit il utilise un menu popmenu dans la barre d'etat de windows.
    Jusque la tout va bien et tout fonctionne.

    Mon probleme est que lorsque l'utilisateur le fait, la boite retourne l'identifiant IDCANCEL, or cela ne me semble pas tres propre puisque c'est le fonctionnement normal.

    J'ai essaye de placer la fonction EndDialog(IDOK) a plusieurs endroit mais sans succes.

    D'avance merci.
    salut,
    je ne suis pas sûr de comprendre cette phrase ,c'est le fonctionnement normal , alors pourquoi ce n'est pas propre ?
    que veux tu faire ?

  4. #4
    Membre expérimenté
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Par défaut
    Le fait de cliquer sur la croix ou de passer par le menu est le fonctionnement normal. Par conséquent je preferai qu'a ces commandes, la boite renvoie IDOK plutot que IDCANCEL.

    Mon application etant basee sur une boite de dialogue, l'application renvoie la valeur retournee par l'execution de la boite de dialogue cad 2. Je souahiterai qu'elle retourne plutot 0 comme la plupart des applications qui se termine "bien". Cela permettrait eventuellement plus tard de l'inclure dans un scrîpt.

    Donc en resume:
    - comment forcer la boite a renvoyer IDOK, meme s'il n'y pas de bouton OK dans la boite, et si on clique sur la croix ou dans un element de menu.
    - comment faire renvoyer 0 par l'appli si la boite renvoie IDOK (encore que cette question sera peut-etre resolue en faisant renvoye IDOK par la boite, mais je ne suis pas sur) ?

  5. #5
    Membre expérimenté
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Par défaut
    Bon le dernier point est resolu, j'ai redefini la fonction ExitInstance par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int CSubversionServerApp::ExitInstance()
    {
    	CWinApp::ExitInstance();
    	return 0;
    }
    C'est peut-etre pas le plus propre mais ca fonctionne...

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 13/05/2009, 16h49
  2. clic bouton qui affiche une boite de dialogue
    Par Nayra dans le forum AWT/Swing
    Réponses: 17
    Dernier message: 09/03/2009, 12h42
  3. Communication entre une Form et une boite de dialogue
    Par mhamdi45 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/10/2008, 10h06
  4. Récupérer l'appuis d'1 bouton d'une boite de dialogue
    Par electrosat03 dans le forum Access
    Réponses: 7
    Dernier message: 20/02/2007, 21h19
  5. Réponses: 5
    Dernier message: 04/04/2003, 15h02

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