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 :

Perte de l'icône d'un CButton


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut Perte de l'icône d'un CButton
    Bonjour,

    Je cherche à rendre inaccessible un bouton à l'utilisateur dans certaines configurations de mon logiciel.

    Mon bouton a 2 états principaux on/off
    Le bouton levé "off" possède son icône
    le bouton baissé "on" possède son icône également.

    Il peut arriver qu'il ne soit pas permis d'activer ou de désactiver ce bouton, pour cela je rends inactif les messages d'interception souris et clavier par la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bPasTouche = false;
    m_tMonJoliBouton.EnableWindow(bPasTouche);
    Petit problème .... Mon icône disparait... ?
    Alors que je voudrais le griser ou qu'ils soit simplement inaccessible mais avec l'icône défini en dernier...

  2. #2
    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
    La seule cause que je verrais, c'est que l'image de l'état DISABLED est mal associée.
    Comment instancies-tu ton bouton?
    Comment lui associes-tu les images?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut
    Mon bouton est une variable membre privée d'une classe héritée de CDialog

    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
    52
    53
    54
    55
    56
    57
    // Interface MyDialog.h
     
    class CMyDialog : CDialog
    {
    // Construction
    public:
     
       /*! Constructeur. 
       */
    CMyDialog::CMyDialog(CWnd* pParent);
     
    /*! Destructeur. 
       */
    	virtual ~CMyDialog();
     
       /*! ID de la fenêtre. 
       */
    	enum { IDD = IDD_REC_DLG };
     
       afx_msg void OnBnClickedRecIQ();
     
    protected:
     
       /*! DDX/DDV support. 
       */
    	virtual void DoDataExchange(CDataExchange* pDX); 
     
       /*! Initialisation de la fenêtre. 
       */
    	virtual BOOL OnInitDialog();
     
       DECLARE_MESSAGE_MAP()
     
    private:
     
    /*! Met le bouton d'enregistrement dans la position bRecIQ 
       */
    void CMyDialog::SetReqIQ(bool bRecIQ);
     
    /*! Boutton enregistrement IQ. 
       */
    CButton m_tButtonRecIQ;
     
    /*! Check button control. 
       */
    bool m_bRecIQ;
     
    /*! Lecture en cours. 
       */
    bool m_bLectureEnCours;
     
    public: 
    /*! Mise à jour de la fonction de lecture 
       */
    void CMyDialog::SetLecture(bool bLectureEnCours);
     
    };

    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
    52
    53
    54
    // Définition MyDialog.cpp
     
     
    CMyDialog::CMyDialog(CWnd* pParent)
        :CDialog(CMyDialog::IDD,pParent)
    {
        m_bRepIQ	 = false;
        m_bLecture   = false;
    }
     
    CMyDialog::~CMyDialog()
    {
    }
     
    CMyDialog:DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
     
        DDX_Control(pDX, IDC_REC_IQ, m_tButtonRecIQ);
    }
     
    BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    	ON_BN_CLICKED(IDC_REC_IQ, OnBnClickedRecIQ)
    END_MESSAGE_MAP()
     
    BOOL CMyDialog::OnInitDialog() 
    {
        CDialog::OnInitDialog();
     
        m_tButtonRecIQ.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_IQ_REC));
     
        return TRUE;  
    }
     
    void CMyDialog::OnBnClickedRecIQ()
    {
    	SetReqIQ(!m_bRecAudio);
    }
     
    void CMyDialog::SetReqIQ(bool bRecIQ)
    {
        m_bRecIQ = bRecIQ;
        m_tButtonRecIQ.SetCheck(m_bRecIQ);
        m_tButtonRecIQ.SetIcon(AfxGetApp()->LoadIcon(m_bRecIQ ? IDI_ICON_IQ_REC_ON : IDI_ICON_IQ_REC));
    }
     
    void CMyDialog::SetLecture(bool bLectureEnCours)
    {
        m_tButtonRecIQ.EnableWindow(!bLectureEnCours);
     
        ...
     
        m_bLectureEnCours = bLectureEnCours;
    }
    Donc quand je lance la lecture de mon player, je peux enregistrer simultanément si le bouton est ON. Mais au moment de la lecture j'aimerais bien que l'utilisateur n'y ait plus accès.

    L'implémentation du stop relâcherai le bouton (non implémenté ici) :
    - bouton OFF
    - bouton enable

    Si ca aide pour résoudre mon problème

  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,
    tu pourrais utiliser un CBitmapButton , dans loadbitmap tu peux préciser l'image quand celui-ci est inactif.
    voir LoadBitmaps.


  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut
    Merci farscape

    Le problème de l'affichage à l'air d'être récurent à l'icône...

    En passant par CBitmapButton, j'affiche bien les bitmaps que je veux
    Par contre il a fallu passer mes *.ico en *.bmp. Petit travail pas très long à faire mais quand même
    Attention ne pas oublier de passer en OwnerDraw obligatoire pour cette classe.

    J'ai encore un souci... J'ai perdu le "up" et down" du bouton. J'ai bien mes bitmaps mais plus "le relief" du bouton ???

    En agrandissant le bouton, le bitmap s'affiche en haut à gauche mais je n'ai plus le contour. Du coup on ne voit plus quand on a appuyé, et le bouton n'est pas grisé lorsqu'il est désactivé.

  6. #6
    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
    Citation Envoyé par Antonin08 Voir le message
    J'ai perdu le "up" et down" du bouton. J'ai bien mes bitmaps mais plus "le relief" du bouton ???

    En agrandissant le bouton, le bitmap s'affiche en haut à gauche mais je n'ai plus le contour. Du coup on ne voit plus quand on a appuyé, et le bouton n'est pas grisé lorsqu'il est désactivé.
    Ca ressemble à un mauvais choix de style de bouton. Pour le bouton non grisé, je pense que ça vient du fait que tu lui as changé son image désactivée.
    Montre le bout de code qui initialise ton bouton.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut
    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
    // MyDialog.h
    CBitmapButton m_tButtonRecIQ;
    // MyDialog.cpp
    BOOL CMyDialog::OnInitDialog() 
    {
        CDialog::OnInitDialog();
     
        // Affichage du bouton mais sans le bitmap
        m_tButtonRecIQ.SetButtonStyle(BS_BITMAP|BS_PUSHBUTTON);
        // Affichage du bitmap mais sans le bouton  ? :P 
        m_tButtonRecIQ.SetButtonStyle(BS_OWNER_DRAW);
     
        m_tButtonRecIQ.LoadBitmaps(IDB_BMP_IQ_REC,IDB_BMP_IQ_REC_ON,0,0);
     
        return TRUE;
    }

  8. #8
    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
    Citation Envoyé par MSDN
    Bitmap-button images include the border around the image as well as the image itself. The border typically plays a part in showing the state of the button. For example, the bitmap for the focused state usually is like the one for the up state but with a dashed rectangle inset from the border or a thick solid line at the border. The bitmap for the disabled state usually resembles the one for the up state but has lower contrast (like a dimmed or grayed menu selection).
    Ce que je comprends, c'est que tes images doivent également dessiner les bords du bouton. En même temps, au final ça paraît logique, car ça permet de faire des boutons autres que ceux typiques Windows.
    Concernant l'image grisée, le mieux c'est que tu fasses toi même ton image désactivée (un filtre gris via Gimp par exemple). Je ne sais pas comment le compilateur réagit si tu lui en spécifie certaines sur les 4 images disponibles. Construit-il les autres à partir de celles que tu lui as rentrées? Je ne pense malheureusement pas.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut
    ARGHHHH

    Mais bien sûr

    J'ai déjà lu ce paragraphe et je n'ai pas voulu y croire
    Je viens de télécharger le projet du MSDN sur le bouton et effectivement il faut faire soit même son bouton. Je viens de regarder les bitmaps (à la loupe !!!) que le projet charge et effectivement il y a bien la gestion des bords

    merci à tous
    allez hop au boulot
    Fichiers attachés Fichiers attachés

  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
    je t'ai parlé du cbitmapbutton parce que au final tu peux faire ce que tu veux..
    un exemple dans la faq:http://cpp.developpez.com/faq/vc/ind...s#SwitchButton

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/04/2009, 09h38
  2. Perte d'enregistrements
    Par AnnSo dans le forum Paradox
    Réponses: 15
    Dernier message: 06/08/2006, 23h39
  3. Fichier ressource contenant une icône
    Par k_boy dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 26/09/2002, 20h59
  4. Extraire les icônes d'une DLL
    Par Globus dans le forum MFC
    Réponses: 6
    Dernier message: 13/09/2002, 13h44
  5. icône d'une fenêtre fille
    Par bastien dans le forum C++Builder
    Réponses: 6
    Dernier message: 27/05/2002, 13h46

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