2010-09-23 11 views
2

Je ne peux pas trouver un exemple simple CToolBar de toutes choses ..MFC CToolBar Aide/Lien?

J'ai créé une barre d'outils dans l'éditeur de ressources, et chargé la barre d'outils dans mon code comme ceci:

toolbar = new CToolBar; 
toolbar->CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, CRect(0, 0, 0, 0), AFX_IDW_TOOLBAR); 
toolbar->LoadToolBar(IDR_TOOLBAR); 

J'ai également traité WM_LBUTTONDOWN dans le plan des messages.

Maintenant, tous les boutons sont grisés ... est-ce que je manque un pas quelque part?

Merci pour toute aide/liens =)

Répondre

3

Les boutons d'une barre d'outils sont désactivés dans MFC par défaut. Pour chaque bouton, qui doit être associé à un ID de commande, vous devez disposer d'une macro ON_UPDATE_COMMAND_UI dans votre table des messages. La fonction de gestionnaire que vous utilisez dans cette macro sera appelée chaque fois que l'application est inactive. Cette fonction peut appeler les fonctions membres du pointeur CCmdUI transmis à la fonction, par exemple la méthode Enable.

+0

Merci. C'est ce qu'il a fait. Je pense que c'est un peu idiot d'avoir les boutons désactivés par défaut = = – bitwise

+0

@Nick, les boutons sont désactivés par défaut car MFC suppose que vous allez ajouter des gestionnaires de commandes via l'assistant intégré. Jusqu'à ce qu'un gestionnaire de commandes soit défini, cela n'a pas de sens d'activer le bouton, n'est-ce pas? J'ai remarqué que Microsoft le fait souvent, optimisant un cas courant au détriment des alternatives. –

+0

Si je voulais implémenter un gestionnaire de commande, il serait exécuté pour tous les contrôles, à chaque mise à jour, y compris celle sur la création. Quelle différence cela ferait-il s'il désactivait initialement certains boutons ou les activait au départ? MAIS si je voulais simplement que mon projet soit prêt, je serais coincé en ajoutant du code supplémentaire .. Je ne vois pas comment c'est une optimisation =/ – bitwise

1

Avez-vous fourni un gestionnaire ON_COMMAND dans la carte du message? Cela devrait ressembler à ON_COMMAND (SOME_BUTTON_ID, OnSomeButton) où SOME_BUTTON_ID correspond à l'un des boutons de votre barre d'outils.