MESSAGEFILTER - FERMETURE FORM PAR ECHAP

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 13 mai 2006 à 19:59
Ramulo Messages postés 2 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 12 octobre 2007 - 11 oct. 2007 à 14:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21781-messagefilter-fermeture-form-par-echap

Ramulo Messages postés 2 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 12 octobre 2007
11 oct. 2007 à 14:45
Vraiment nikel ce système, je ne connaissais pas les MessageFilter, c'est bien pratique !
Par contre j'ai pris le parti de ne pas faire une classe 'EchapMessageFilter' dédiée, mais plutot de faire implémenter l'interface directement à mon form, je trouve ca plus simple :

public class Form1 : System.Windows.Forms.Form, IMessageFilter

Merci pour l'astuce en tous cas !
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 mai 2006 à 23:59
Ceci devrait peut être t'aider (à améliorer) :

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern IntPtr GetWindow(HandleRef hWnd, int uCmd);

private const int GW_OWNER = 4;

private bool IsForMe(IntPtr hwnd)
{
bool ret = false;

IntPtr owner = GetWindow(new HandleRef(this, hwnd), GW_OWNER);

if (owner != IntPtr.Zero)
{
Control ctrl = Control.FromHandle(owner);

if (ctrl != null)
ret = this._form.Contains(ctrl);
else
ret = false;
}
else
ret = false;

return ret;
}
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 mai 2006 à 23:33
Oui, le problème est exactement le même.
Je pense que tu peux y arriver en utilisant directement les API Win.
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
13 mai 2006 à 21:55
Remarque, j'ai dit combobox mais j'ai aussi testé avec une textbox dans une toolbar et le problème reste entier.
Je comptais résoudre le problème de mon application http://www.csdnpicviewer.info en passant par les messages windows (l'evenemnt mouse wheel n'est plus capté lorsque l'utilisateur clique sur la combobox), je crois que je me suis foutu le doigt dans l'oeil. N'y a t-il donc pas une solution?
Sinon, bravo pour cette source, c'est assez instructif =)
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 mai 2006 à 21:42
Le problème vient du fait que le contrôle ComboBox fonctionne avec un contrôle Edit interne, et que c'est sur celui ci qu'est envoyé le message.
Hors la méthode Control.FromHandle n'est pas capable de déterminer ce contrôle Edit, d'où la non prise en charge du message :(
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
13 mai 2006 à 19:59
J'ai rajouté à ton projet une toolbar avec un combobox, et si je clique sur cette combobox, l'evenement "echap" n'est plus détecté :/
Comment remédier à ce problème ? Je pensais que les message windows n'étaient pas dépendant du control qui a le focus :<
Rejoignez-nous