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

C++ Discussion :

Problème d'event sur un CMFCToolBarButton


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 27
    Points : 5
    Points
    5
    Par défaut Problème d'event sur un CMFCToolBarButton
    Bonjour à tous !
    Je suis en train de migrer une application de VS06 à VS2012, et j'en suis au remplacement des CToolbar par des CMFCToolbar. Je rencontre ici un problème : Le bouton intégré à la Toolbar ne fonctionne pas (il se grise quand on clic dessus, puis se dégrise lorsqu'on repasse le curseur vers l'élément ciblé (ce bouton permet d'ouvrir une bibliothèque suivant l'élément sélectionné dans la page)).
    Je précise que l'on est sur une page (que je nomme Page.cpp pour cet exemple) qui hérite de la classe CDialog.

    Voilà le code qui pourrait être utile :

    Page.cpp : OnInitDialog() :

    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
    CDialog::OnInitDialog();
     
    	///////Construction CMFCToolbar
     
    	if (!_toolBarTabComp.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP, CRect(1,1,1,1), IDR_MAINFRAME))
    	{
    		TRACE0("Failed to create toolbar add item\n");
    		return -1;      // fail to create
    	}
    	VERIFY(_toolBarTabComp.LoadBitmap(IDR_TOOLBAR_TAB_PROP_COMP));
    	_toolBarTabComp.InsertButton(CMFCToolBarButton(ID_BIBLI_COMP, 0));
    	CSize   sizeToolBar = _toolBarTabComp.CalcFixedLayout( FALSE, TRUE );
            _toolBarTabComp.SetWindowPos( NULL, 0, 0, sizeToolBar.cx, sizeToolBar.cy,SWP_NOACTIVATE | SWP_NOZORDER );
     
    	_toolBarTabComp.SetPaneStyle(_toolBarTabComp.GetPaneStyle() &
    	CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT);
            // ......
    Page.cpp : gestion des événements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BEGIN_MESSAGE_MAP(CPage, CDialog)
    	//{{AFX_MSG_MAP(CPropertyComplement)
    	ON_WM_CREATE()
    	ON_MESSAGE(ID_MESSAGE_CHANGEDATE, OnAfterEditGrilleMSG)
    	ON_WM_SIZE()
    	ON_COMMAND(ID_BIBLI_COMP, OnClick)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    Page.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // ........
            protected:
    	// Generated message map functions
    	//{{AFX_MSG(CPage)
            //.......
    	afx_msg void OnClick();
    	DECLARE_EVENTSINK_MAP()
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
     
    };
    Je peux aussi poster le fichier .rc de la boite de dialogue, et une partie du fichier .h du projet, mais je ne suis pas sure que se soit nécessaire !
    Sinon j'ai essayé de créer une toolbar de la même manière sur un projet vide, et le bouton fonctionne... J'ai aussi insérer un point d'arrêt dans la fonction "OnClick()" qui est sensée être appelée quand on actionne le bouton, ce qui prouve que le problème ne vient pas de cette fonction : le programme n'y passe même pas ..

    Je vous remercie d'avance de votre aide !

    Sleepy

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Mes MFC datent d'il y a longtemps, très longtemps.

    Mais, de mon temps, pour la mise à jour de l'état des boutons, on passait par le "message" UPDATE_COMMAND_UI.
    http://www.tenouk.com/visualcplusmfc...cplusmfc8.html

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Mes MFC datent d'il y a longtemps, très longtemps.

    Mais, de mon temps, pour la mise à jour de l'état des boutons, on passait par le "message" UPDATE_COMMAND_UI.
    http://www.tenouk.com/visualcplusmfc...cplusmfc8.html
    Salut bacelar !

    Non non ça ne marche pas non plus, j'ai essayé avec "ON_UPDATE_COMMAND_UI", avec "ON_COMMAND", puis avec "ON_BN_CLICKED", mais rien ne fonctionne.. :/

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Si ça marchait en VC++6 dans une CDialog, c'est qu'il y a de la tuyauterie de messages en plus :
    https://support2.microsoft.com/defau...b;en-us;242577

    Vous l'avez cassée ???

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Non non je ne touche pas à l'UI du menu dans ma CDialog, je ne pense pas que ça me concerne, j'ai ajouté les lignes qu'ils demandaient d'ajouter dans le lien pour être sure, et ça ne change toujours rien /:

    J'utilise aussi un flex sur la même page (peut être que j'aurai du préciser), un tableau, et le programme capte ses événements, mais pas ceux du bouton de la Toolbar..

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    >Non non je ne touche pas à l'UI du menu dans ma CDialog
    C'est pas la CDialog qui touche à l'UI du menu, c'est que le fait que cela soit une CDialog fait que les trucs qui sont sensés fonctionner avec des CWnd ne fonctionne pas dans des CDialog.

    Si vous aviez déjà une CDialog avant et que vous n'avez pas changé la mécanique de création des menu et de la taskbar, ce qui fonctionnait avant devrait toujours fonctionner.

    Passez-vous bien dans le handler de "ON_UPDATE_COMMAND_UI" ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par bacelar Voir le message
    >C'est pas la CDialog qui touche à l'UI du menu, c'est que le fait que cela soit une CDialog fait que les trucs qui sont sensés fonctionner avec des CWnd ne fonctionne pas dans des CDialog.
    Ben le truc c'est que j'ai crée la Toolbar de la même manière que je l'ai crée dans une CDialog dans un projet vide (où tout fonctionne).

    Si vous aviez déjà une CDialog avant et que vous n'avez pas changé la mécanique de création des menu et de la taskbar, ce qui fonctionnait avant devrait toujours fonctionner.

    Passez-vous bien dans le handler de "ON_UPDATE_COMMAND_UI" ?
    Non non j'ai juste changé CToolbar par CMFCToolbar, donc rien de trop gros..
    Qu'est ce que vous appelez handler de "ON_UPDATE_COMMAND_UI" ? Si je passe bien dans ce bout de code là ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BEGIN_MESSAGE_MAP(CPropertyComplement, CParamClassParent)
    	//{{AFX_MSG_MAP(CPropertyComplement)
    	ON_WM_CREATE()
    	ON_MESSAGE(ID_MESSAGE_CHANGEDATE, OnAfterEditGrilleMSG)
    	ON_WM_SIZE()
    	ON_BN_CLICKED(ID_BIBLI_COMP, &OnClick)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    Si oui, et ben oui j'y passe

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Ah je crois avoir oublié de préciser, avec CToolbar ça marchait très bien, juste que l'icone du bouton n'était pas affiché, mais l'événement fonctionnait !

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Up ?

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Pouvez-vous mettre sous GitHub ou dans un zip, un source minimal pour reproduire le problème ?
    Je viens de remarqué que même avec VS2012, la création d'une toolbar dans un CDialog n'est pas une opération triviale.

Discussions similaires

  1. Problèmes d'évènements sur ComboBox
    Par bakaneko dans le forum MFC
    Réponses: 3
    Dernier message: 23/02/2004, 08h46
  2. Problème de reqûete sur la date, année et mois en cours
    Par Jean-Marc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/02/2004, 16h36
  3. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  4. Problème avec RDTSC sur K6-III
    Par le mage tophinus dans le forum x86 32-bits / 64-bits
    Réponses: 17
    Dernier message: 30/09/2003, 09h43
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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