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 :

Griser une checkbox


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut Griser une checkbox
    Bonjour à tous !

    J'ai un probleme. J'arrive pas à griser une checkbox avec la fonction EnableWindow.

    Je sais qu'il y a deja un sujet la dessus, mais je n'ai pas reussi meme en m'inspirant de la réponse.

    Je verifie si un fichier existe et si celui ci n'existe pas je grise la checkbox correspondante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Module == NULL)//CAS 1 : SI le module n'existe pas on grise la checkbox
    	{
    	GetDlgItem (IDC_MOD_CARA)->EnableWindow (false);
    	}

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Quels sont les symptômes? Es-tu sûr de dérouler le code (Module est bien NULL et GetDlgItem retourne un objet valide)?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Oui oui Module est bien NULL.

    Mais le debuggeur de Visual me repond ceci :

    error C2660: 'GetDlgItem' : la fonction ne prend pas 1 arguments

    error C2227: la partie gauche de '->EnableWindow' doit pointer vers un type class/struct/union/générique


    Voila les symptômes

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Cet appel n'a donc pas lieu dans la boîte de dialogue. Donc où a lieu cet appel? Poste l'ensemble de la fonction...

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Voici :

    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
    void CFichier::OnMenuPiloter()
    {	
     
     
    	CString Mod = "DCARA";
    	CString Chemin = Working_Path + Mod; 
     
    	 FILE *Module = fopen (Chemin, "r");
     
     
    	if (Module == NULL)//CAS 1 : SI le module n'existe pas on grise la checkbox
    	{
    	//MessageBox(NULL, "Pas trouvé !", "Warning", MB_OKCANCEL);
    	GetDlgItem (IDC_MOD_CARA)->EnableWindow (false);
    	}
    	else
    	{
    	MessageBox(NULL, "Fichier Trouvé !", "Warning", MB_OKCANCEL);
    	}
     
    	CPilDialog PilDlg;
    	PilDlg.DoModal();
    }
    Désolé je debute ...

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    CFichier, c'est quoi comme classe? Un CDIalog (vu, l'erreur, je pense que non)? En fait, de quelle boîte de dialogue souhaites-tu retrouver la checkbox? Où l'as-tu créée (DoModal ou Create)?

  7. #7
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Ah, je crois avoir compris un truc. Je suppose que le code de 'grisage' de mes checkbox doit se trouver dans la classe de la boite de dialogue.

    Parce que la je faisais tout ca avant l'appel de ma boite de dialogue. Comme vous pouvez le voir, à la fin de mon code il y a mon DoModal.

    J'ai donc essayé de faire comme ceci : (Dans la classe de la boite de dialogue) :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    // PilDialog.cpp : fichier d'implémentation
    //
    
    #include "stdafx.h"
    #include "PilDialog.h"
    
    
    // Boîte de dialogue CPilDialog
    
    IMPLEMENT_DYNAMIC(CPilDialog, CDialog)
     
    CPilDialog::CPilDialog(CWnd* pParent)
    	: CDialog(CPilDialog::IDD, pParent)
    {
    }
    
    CPilDialog::~CPilDialog()
    {
    }
    
    void CPilDialog::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    
    BEGIN_MESSAGE_MAP(CPilDialog, CDialog)
    	ON_COMMAND(ID_MENU_PILOTER, OnModCara);
    END_MESSAGE_MAP()
    
    
    // Gestionnaires de messages CPilDialog
    	
    void CPilDialog::OnModCara()
    {	
    	MessageBox("Fichier existe");
    	DWORD attrib = GetFileAttributes("D:\Documents and Settings\lambert\Bureau\Mickael - Pyth\Ellipse\DCARA.bak");
    	if (attrib == INVALID_FILE_ATTRIBUTES)
    	{
    		MessageBox("Fichier existe");
    		enum { CARA = IDC_MOD_CARA };
    		GetDlgItem(CARA) -> EnableWindow(false);
    	}
    
    	File *file = fopen("D:\Documents and Settings\lambert\Bureau\Mickael - Pyth\Ellipse\DCARA.bak","r");
    		if (file == NULL)
    		{
    			GetDlgItem(IDC_MOD_CARA) -> EnableWindow(false);
    		}
    	
    }
    Malheureusement ca ne marche toujours pas. Ca me met 13 erreurs sur la syntaxe des éléments en rouge.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Pourquoi ne pas initialiser ta check box dans la fonction OnInit de ta boite de Dialogue?

  9. #9
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Parce que je ne sais pas ou se trouve cette fonction ...

    Et si elle n'existe pas je ne sais pas ou la créer ... Désolé !

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    As-tu un DECLARE_MESSAGE_MAP (ou quelque chose de ce goût) dans la déclaration de CPilDialog (dans le .h ?). En fait, poste "PilDialog.h" comme ça on aura tout

    [EDIT] alen parle de la méthode OnInitDialog qui est normalement créée par défaut lorsque tu créé une classe CDialog avec Visual.

  11. #11
    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 3DArchi Voir le message
    alen parle de la méthode OnInitDialog qui est normalement créée par défaut lorsque tu créé une classe CDialog avec Visual.
    Non, elle n'est pas créée par défaut (en tout cas par sur mon Studio). Par contre, elle peut être redéfinie facilement. Il faut se placer dans le .h de la classe de la boîte de dialogue, aller dans la fenêtre de propriétés, cliquer sur le bouton "Substitutions", et au niveau de "OnInitDialog" il faut cliquer dans la combobox et choisir "<Ajouter> OnInitDialog".

  12. #12
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Merci pour vos réponses, désolé pour le retard !

    Je poste le .h :

    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
    #pragma once
     
    #include "resource.h"
     
    // boîte de dialogue CPilDlg utilisée pour l'enchainement des modules
     
    class CPilDialog : public CDialog
    {
    	DECLARE_DYNAMIC(CPilDialog)
     
    public:
    	void OnModCara();
    	CPilDialog(CWnd* pParent = NULL);
    	virtual ~CPilDialog();
     
    	enum { IDD = IDD_PILOTBOX };
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge DDX/DDV
     
    // Implémentation
     
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    Voila. Et donc ou dois-je placer mon 'grisage' de checkbox ?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Oui ou alors prendre les propriétés de ta classe, onglet classe séléctionne ta CPilDialog va ensuite dans l'onglet proriétés sur le haut de cette fenetre tu a un bouton pour substituer.

  14. #14
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Bah justement dans les propriétés je n'ai pas celle ci de substituer...

    Mais sinon c'est quoi la syntaxe pour 'griser' ma checkbox ?

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BEGIN_MESSAGE_MAP(CPilDialog, CDialog)
    	ON_COMMAND(ID_MENU_PILOTER, OnModCara)
    END_MESSAGE_MAP()
    Il faut enlever le ';' à la fin de ON_COMMAND

  16. #16
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    J'ai enlever le ';'. Mais je ne sais toujours pas ou mettre ma rechercher de fichier et mon 'grisage' de checkbox.

  17. #17
    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
    Une chose est sûre : ça ne doit pas être dans ta méthode CFichier::OnMenuPiloter().

    Est-ce que ton code compile ?
    Est-ce que tu entres dans ta méthode CPilDialog::OnModCara() ?

  18. #18
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    Citation Envoyé par PetitPapaNoël Voir le message
    Une chose est sûre : ça ne doit pas être dans ta méthode CFichier::OnMenuPiloter().

    Est-ce que ton code compile ?
    Est-ce que tu entres dans ta méthode CPilDialog::OnModCara() ?

    Oui je rentre dedans, ceci c'est dans mon fichier PilDialog.cpp :

    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
    void CPilDialog::OnModCara()
    {	
    	CString Mod = "DCARA";
    	CString Chemin = Working_Path + Mod; 
     
    	FILE *Module = fopen (Chemin, "r");
     
     
    	if (Module == NULL)//CAS 1 : SI le module n'existe pas on grise la checkbox
    	{
    	MessageBox("Pas trouvé !");
        GetDlgItem (IDC_MOD_CARA)->EnableWindow (false);
    	}
    	else
    	{
    	MessageBox("Trouvé !");
    	}
     
    }

  19. #19
    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
    Hé bien si tu entres bien dans cette fonction quand tu exécutes ton programme, que se passe-t-il quand tu es dans le cas où ton fichier n'est pas trouvé ?

  20. #20
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Es-ce que maintenant le grisage fonctionne? Normalement,tu ne devrais plus avoir le problème? Pour savoir où mettre ta fonction de recherche de fichier, c'est le design de ta boîte de dialogue qui doit te guider : sur réaction à un autre contrôle, à l'initialisation de la boîte (le fameux OnInitDialog)...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Griser un formulaire à l'aide d'une checkBox
    Par juniordev dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/07/2014, 09h45
  2. Griser un champ text suivant le cochage d'une checkbox
    Par Seb981 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 10/08/2007, 16h47
  3. [HTML] Griser une checkbox
    Par Sancho_54 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/02/2006, 11h38
  4. Comment griser une ligne dans une TListBox ?
    Par SegmentationFault dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/06/2004, 09h15
  5. [struts] mémorisation d'une checkbox avec cookie
    Par rocco dans le forum Struts 1
    Réponses: 3
    Dernier message: 22/04/2004, 12h39

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