0

私は 2 つの Windows フォームを持つ C# アプリケーションに取り組んでいます。どちらのフォームも全画面表示で、一方のフォームが透明なオーバーレイとして他方のフォームの上に表示されます。一番下のフォームには、Web ブラウザーが含まれています (これも全画面表示)。ジェスチャをキャプチャし、ボタンやその他のコントロールを画面に描画するために、透明なオーバーレイ フォームでタッチ入力を追跡しています。私がする必要があるのは、オーバーレイ フォームがその WndProc 関数で取得するすべての Windows メッセージを下のフォーム (またはフォーム内の Web ブラウザー コントロール) に送信することです。

基本的には、オーバーレイ上のジェスチャを処理するだけで済みます。特定の機能を提供するには、すべてのマウス メッセージを Web ブラウザに転送する必要があります。

オーバーレイからのメッセージを受け取って、下のフォームの WndProc メソッドを呼び出す単純な方法を試しました。(そして同様に、ブラウザ コントロール ウィンドウの WndProc にさらに渡そうとしました)。これらの方法はどちらも機能しません。また、メッセージ オブジェクトの HWnd パラメーターを単純に交換して、これを試みているときに下のフォーム/ブラウザーのハンドルにしようとしましたが、これもうまくいきませんでした。

では、試してみる方法や、フォーム間で Windows メッセージを渡す正しい方法を考えられる人はいますか?

ありがとう、アレックス

4

2 に答える 2

0

1つのマスターフォームを作成し、これら2つのフォームを子フォームにします。子フォームからマスターにイベントを委任し、処理したいイベントをマスターに処理させます。

于 2010-05-19T17:40:46.633 に答える
0
var topForm = new Form1(); // top form
var browserForm = new Form2(); // bottom form with webbrowser control

Form1 に MouseClick イベントを追加する

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

マウス クリック イベントを処理するカスタム WebBrowserEx コントロールを作成し、このコントロールを 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));
        }
    }
}
于 2010-05-19T18:40:57.947 に答える