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 :

Desactivation BN_DOUBLECLICKED dans CBitmapButton


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    28
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Par d�faut Desactivation BN_DOUBLECLICKED dans CBitmapButton
    Bonjour, voici mon interrogation : Je cr�e une CDialog vide, j'y ajoute un CButton et un CStatic (type rectangle + SS_NOTIFY) (ou un autre contr�le), j'intercepte les �v�nements clic sur les deux �l�ments, et je compte le nombre de clics effectu�s sur chacun.
    Je clique assez rapidement 20 fois sur le CButton, puis 20 fois sur le CStatic, le compteur CButton est bien � 20 mais le CStatic n'est qu'� 10/15 selon rapidit� des clics. J'ai du mal � cerner d'o� vient la diff�rence, d'une diff�rence de gestion des notifications sur le contr�le parent mais laquelle ? Merci si certains peuvent m'�clairer sur ce point, pas vital mais qui m'�tonne.

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Il est possible que certains de tes clics rapides soient intercept�s comme des double-clics par le static...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    28
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Par d�faut
    Merci pour la r�ponse, elle m'a mise un peu sur la voie. En effet, le second click d�clenche un �v�nement double-click que je n'arrive pas � neutraliser. En fait dans mon probl�me initial je n'essayais pas avec un CStatic mais avec un CBitmapButton. Apr�s lecture note de microsoft , il s'av�re que le BS_OWNERDRAW inclut automatiquement un BS_NOTIFY responsable de la g�n�ration des �v�nements double-clic. J'ai essay� un ModifyStyle(BS_NOTIFY, 0, 0) sans succ�s puisqu'il est inclus en auto dans BS_OWNERDRAW. J'ai �galement essay� une sous-classe avec WM_LBUTTONDBLCLK qui renvoie des WM_LBUTTONDOWN mais �a ne passe pas.
    Donc en gros il n'y a pas de moyens de d�sactiver les BN_DOUBLECLICKED une fois la propri�t� BS_OWNERDRAW est d�finie ?

  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,
    BS_OWNERDRAW concerne la gestion de l'affichage pas le comportement du contr�le...

  5. #5
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    28
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Par d�faut
    Si j'avais l'air de dire que BS_OWNERDRAW �tait une notification c'est que je me suis mal exprim�. BS_OWNERDRAW am�ne sont lot d'�v�nements automatiques.

    A button sends the BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUS, and BN_UNPUSHED notification messages only if it has the BS_NOTIFY style. BN_DBLCLK notification messages are sent automatically for BS_USERBUTTON, BS_RADIOBUTTON, and BS_OWNERDRAW buttons. Other button types send BN_DBLCLK only if they have the BS_NOTIFY style. All buttons send the BN_CLICKED notification message regardless of their button styles.
    donc a priori pas de moyens de d�sactiver BN_DBLCLK/BN_DOUBLECLICKED ?

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Pas s�r.
    Si tu fais un GetClassLong(GCL_STYLE) sur le bouton, tu verras qu'il a s�rement le style CS_DBLCLKS. Si tu refais un SetClassLong() sans ce style, tu peux s�rement d�sactiver le double-clic sur le bouton et tous les boutons cr��s apr�s lui (c'est du "global subclassing", mais j'ignore si �a marche bien avec MFC).

    Si tu veux juste modifier pour ce bouton-l�, tu peux peut-�tre restaurer le style ensuite, ou au contraire superclasser le bouton avant sa cr�ation. Seulement, j'ignore si le superclassing marche avec MFC...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    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 peux essayer de faire ton SetClassLong dans la fonction virtuelle PreSubclassWindow de ta classe bouton.

  8. #8
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    28
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Par d�faut
    Ca fonctionne, merci beaucoup � vous deux

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void CMyPicBt::PreSubclassWindow() {
    	// TODO: Add your specialized code here and/or call the base class
    	DWORD mot=GetClassLong(m_hWnd, GCL_STYLE);
    	mot^=CS_DBLCLKS;
    	SetClassLong(m_hWnd, GCL_STYLE, mot);
    	CBitmapButton::PreSubclassWindow();
    }
    Je change le titre du topic pour le moteur de recherche.

  9. #9
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Conseil : Utilise mot &= ~CS_DBLCLKS � la place de ta ligne actuelle (histoire d'�tre s�r de l'enlever syst�matiquement et non pas de le mettre s'il n'est pas l�...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. desactivation ecriture dans logs
    Par ph.janin dans le forum Sybase
    R�ponses: 3
    Dernier message: 14/06/2007, 11h51
  2. Désactivation souris dans un sous-formulaire
    Par zitro45 dans le forum Access
    R�ponses: 8
    Dernier message: 17/10/2006, 09h50
  3. R�ponses: 1
    Dernier message: 20/06/2006, 15h47
  4. Activation et desactivation d'un champ dans un form
    Par danielperdriolle dans le forum IHM
    R�ponses: 7
    Dernier message: 23/03/2006, 11h10
  5. [VB6]Afficher du texte dans Textbox desactiv� + scrollbar?
    Par toninlg dans le forum VB 6 et ant�rieur
    R�ponses: 3
    Dernier message: 21/03/2006, 18h40

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