bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 2009
-
13 mai 2006 à 19:59
Ramulo
Messages postés2Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention12 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.
Ramulo
Messages postés2Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention12 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és6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 13 mai 2006 à 23:59
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és6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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és339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 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és6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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és339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 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 :<
11 oct. 2007 à 14:45
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 !
13 mai 2006 à 23:59
[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;
}
13 mai 2006 à 23:33
Je pense que tu peux y arriver en utilisant directement les API Win.
13 mai 2006 à 21:55
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 =)
13 mai 2006 à 21:42
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 :(
13 mai 2006 à 19:59
Comment remédier à ce problème ? Je pensais que les message windows n'étaient pas dépendant du control qui a le focus :<