Comment puis-je désactiver puis activer le bouton Réessayer dans un MessageBox?

StackOverflow https://stackoverflow.com/questions/176062

  •  05-07-2019
  •  | 
  •  

Question

J'ai le code C ++ non géré suivant:

MessageBox( NULL, strMessage, "Cool Product", MB_RETRYCANCEL | MB_ICONEXCLAMATION);

Je souhaite désactiver le bouton RETENIR pendant 10 secondes (par exemple), puis l'activer.

Comment puis-je faire cela?

Était-ce utile?

La solution

Comme @ffpf indique que vous devez créer votre propre dialogue pour ce faire, en utilisant MFC, ATL, Win32 brut, etc.

Créez ensuite une minuterie qui permettrait d'activer et de désactiver le bouton.

Autres conseils

Vous ne pouvez pas manipuler directement les contrôles MessageBox, mais vous pouvez utiliser un hack. Installez un point d'ancrage WH _ CBT juste avant d'afficher la boîte de dialogue et gérez l'événement HCBT _ ACTIVATE. Cela vous donnera le HWND de la boîte de message, de sorte que vous puissiez faire ce que vous voulez avec elle (la sous-classer, gérer ses boutons et définir une minuterie).

Vous pouvez trouver un didacticiel Custom MessageBox avec du code de démonstration sur le site de James Brown.

Avec l'appel standard de MessageBox, vous ne pouvez pas. Pour ce faire, vous devez implémenter votre propre MessageBox.

Je ne crois pas que cela soit possible avec l'appel standard d'une boîte de message.

Vous feriez probablement mieux d'écrire votre propre boîte de message contenant cette fonctionnalité.

(Vous pouvez également écrire un fil séparé surveillant l'écran en attendant que la boîte de message apparaisse, désactivez le bouton Réessayer, attendez 10 secondes et réactivez-le. Pas amusant. Sérieusement, faites-le dans l'autre sens.)

Depuis Vista, vous pouvez utiliser taskdialog - une boîte de dialogue plus sophistiquée qu’une simple boîte de message. Plus d'infos et liens ici .

Je suis d'accord avec efotinis, ce n'est pas impossible, une fois que vous avez le HWND, vous pouvez en faire ce que vous voulez. C’est juste une question de "avez-vous vraiment besoin des bidouilles ou vaut-il mieux créer votre propre boîte de dialogue"?

Une autre façon moins agréable de trouver HWND (qui vous donnerait évidemment accès à tout ce qui se trouve dans la boîte de message) consiste à démarrer un fil et à interroger de manière concrète le descripteur de la boîte de message en utilisant EnumChildWindows. Mais personnellement, je préférerais aussi le crochet WH_CBT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top