2009-05-04 7 views
5

Nous avons une application héritée écrite en C qui utilise WinAPI. Nous aimerions ajouter un bouton "Oui à tous" à quelques-unes de nos boîtes de dialogue. Malheureusement, la fonction MessageBox existante n'autorise pas les boutons personnalisés ou les légendes de boutons.Comment créer un bouton "Oui à tous" en utilisant WinAPI?

Quelle est la meilleure façon de le faire? Y a-t-il un bidouillage astucieux pour ajouter facilement un bouton personnalisé? Ou devrions-nous créer notre propre remplacement MessageBox?

+3

Um, créez un bouton et donnez-lui la légende "Oui à tous"? Je pense que vous devez être un peu plus précis. –

+0

MessageBox dans le WinAPI ne permet apparemment pas de créer ses propres boutons et de leur donner des légendes personnalisées. Cela aurait été la première chose que j'aurais essayé. – Brown

+1

Vous pouvez personnaliser MessageBox(). Utilisez SetWindowsHookEx() pour installer un hook CBT spécifique au thread juste avant d'appeler MessageBox(). Lorsque le crochet est déclenché, vous aurez accès au HWND du dialogue, et pouvez faire ce que vous voulez (ajouter des contrôles enfants supplémentaires, déplacer les contrôles, changer le texte, etc.). –

Répondre

2

Il y a un autre type d'une boîte de message dans WinAPI, depuis Windows 2000. Il est SHMessageBoxCheck.

Il vous permet d'afficher une norme MB_OKCANCEL/MB_YESNO/MB_OK -type MessageBox avec l'option pour ne jamais le montrer à nouveau, en précisant que l'option par défaut dans ce cas est.

Peut-être que ce n'est pas exactement ce que vous cherchez, mais c'est assez cohérent avec Windows UI. Dans Vista, la plupart des boîtes de dialogue «Oui à tous» de la coquille fonctionnent de cette façon - il n'y a pas de bouton additionnel disant «Oui/Non à tous» - il y a une case à cocher «Effectuer une action choisie sur tous les éléments».

Cependant la note dans la documentation me préoccupe:

Cette fonction est disponible via Microsoft Windows XP et Windows Server 2003. Il peut être modifié ou non disponible dans les versions ultérieures de Windows.

2

Vous pouvez également prendre soin de l'emballage texte pour le rendre semblable à MessageBox. De plus, MessageBox utilise une police différente de la police GUI par défaut. Et n'oubliez pas de jouer le son lorsque la boîte de dialogue apparaît :)

Questions connexes