Vous devrez vous-même gérer les messages. Cependant, il est assez facile de faire une classe qui le fait pour vous. .: par exemple
public class HelpCards : IMessageFilter {
const int WM_TCARD = 0x52;
const int ID_NOTIFICATION = 4242;
public enum TCardAction: int {
IDOK = 1,
IDCANCEL = 2,
IDABORT = 3,
IDRETRY = 4,
IDIGNORE = 5,
IDYES = 6,
IDNO = 7,
IDCLOSE = 8,
IDHELP = 9,
HELP_TCARD = 0x8000,
HELP_TCARD_DATA = 0x0010,
HELP_TCARD_OTHER_CALLER = 0x0011,
HELP_TCARD_OTHER_NEXT = 0x0011,
}
public HelpCards() {
Application.AddMessageFilter(this);
}
public delegate void OKReceived();
public event OKReceived OnOKReceived;
public bool PreFilterMessage(ref Message m) {
if (m.Msg == WM_TCARD && (int)m.WParam == ID_NOTIFICATION) {
switch ((TCardAction)m.LParam) {
case TCardAction.IDOK:
if (OnOKReceived != null) {
OnOKReceived();
}
break;
// etc.
}
return true; // true means message was handled
}
return false;
}
}
Puis, à l'endroit où vous souhaitez vous abonner (probablement dans votre forme quelque part) utiliser
hc = new HelpCards();
hc.OnOKReceived += new OKReceived(hc_OnOKReceived);
et ont hc
défini dans la définition de classe de la forme. Comme si
HelpCards hc;
Et quelque part ont la fonction de manipulation:
void hc_OnOKReceived() {
throw new NotImplementedException();
}
Il est évident que vous aurez besoin de faire le reste vous-même. Mais cela devrait vous aider à démarrer.
Merci pour cela. Je pensais que ce serait le cas, mais j'espérais avoir raté quelque truc avec le HelpProvider ou quelque chose qui signifierait que je n'avais pas besoin de gérer le message –
Oh, et vous voulez probablement supprimer le filtre de message lorsque la classe est éliminée . Et vous voulez probablement utiliser EventHandler, pas void() pour le délégué d'événement. –