2010-05-19 18 views
0

Je travaille sur une application C# avec deux formulaires Windows. Les deux formulaires sont en plein écran et un formulaire se trouve au-dessus de l'autre en tant que superposition transparente. Le formulaire inférieur contient un navigateur Web (également en plein écran). Je suis suivi de saisie tactile sur le formulaire de superposition transparente afin de capturer les gestes et dessiner des boutons et d'autres contrôles sur l'écran. Ce que je dois faire est d'envoyer tous les messages de Windows que la forme de recouvrement obtient dans sa fonction de WndProc au formulaire ci-dessous (ou le contrôle de navigateur Web dans le formulaire puisque c'est fondamentalement tout le formulaire inférieur est utilisé pour contenir).C# Passer des messages WndProc d'un formulaire à un autre formulaire

Fondamentalement, j'ai juste besoin de gérer les gestes sur la superposition, tous les messages de la souris doivent encore transférer au navigateur Web pour fournir certaines fonctionnalités.

J'ai essayé la méthode naïve d'appeler simplement la méthode WndProc de la forme inférieure en fonction du message de l'overlay. (Et de même j'ai essayé de le passer plus loin à la WndProc de la fenêtre de contrôle du navigateur). Aucune de ces méthodes ne fonctionne. J'ai également essayé simplement d'échanger le paramètre HWnd de l'objet Message pour qu'il soit le handle du formulaire/navigateur inférieur lors de la tentative et cela n'a pas fonctionné. Donc, est-ce que n'importe qui pourrait penser à plus de méthodes à essayer, ou peut-être la méthode correcte de passer des messages de Windows entre les formes?

Merci, Alex

+0

Pourquoi vous vous limitez à seulement Messages WndProc ? – volody

+0

Voilà comment je reçois l'entrée tactile pour le moment. Cependant, l'entrée tactile est également considérée comme une entrée de la souris. Je crois donc qu'une question supplémentaire serait de savoir si une méthode facile/propre permet de passer tous les événements de la souris à la forme inférieure. – Alex

Répondre

0

Que diriez-vous en créer une forme de maître, et que ces deux formes soient les formes de l'enfant. Déléguez les événements des formulaires enfant à maîtriser et laissez le maître traiter tous les événements que vous souhaitez traiter.

+0

Parlez-vous d'utiliser MDI sous une forme ou simplement une suggestion d'architecture? Si c'est MDI alors j'ai déjà essayé cela et les formes enfants MDI ne peuvent pas être transparentes, il semblerait. Si vous parlez d'architecture, c'est déjà ce que je fais. Le formulaire de superposition est le maître et il a la forme du navigateur en tant qu'objet à l'intérieur. – Alex

+0

Oui, avec MDI vous n'aurez aucune transparence. – volody

+0

Malheureusement la transparence est nécessaire dans la forme de superposition car tout ce dont il s'agit vraiment est de fournir un pad pour la saisie tactile à traiter et le contenu du navigateur ci-dessous est alors manipulé. – Alex

0
var topForm = new Form1(); // top form 
var browserForm = new Form2(); // bottom form with webbrowser control 

Ajouter un événement MouseClick à Form1

private void Form1_MouseClick(object sender, MouseEventArgs e) 
{ 
    browserForm.DoClick(e.X, e.Y); 
} 

créer un contrôle WebBrowserEx personnalisé pour les événements de clic de souris processus et ajouter ce contrôle à Form2

namespace WindowsFormsApplication1 
{ 
    public class WebBrowserEx: System.Windows.Forms.WebBrowser 
    { 
     public void DoClick(int x, int y) 
     { 
      base.OnMouseClick(new MouseEventArgs(MouseButtons.Left, 1, x, y, 0)); 
     } 
    } 
} 
+0

check Comment: Simuler des événements de souris et de clavier dans le code http://msdn.microsoft.com/fr-fr/library/ms171548.aspx – volody