0

我正在开发具有两个 Windows 窗体的 C# 应用程序。两种形式都是全屏的,一种形式位于另一种形式的顶部作为透明覆盖。底部表单包含一个网络浏览器(也是全屏浏览器)。我正在跟踪透明覆盖表单上的触摸输入,以便在屏幕上捕获手势并绘制按钮和其他控件。我需要做的是将覆盖表单在其 WndProc 函数中获取的所有 Windows 消息发送到下面的表单(或表单中的 Web 浏览器控件,因为基本上所有较低的表单都用于包含)。

基本上我只需要处理叠加层上的手势,所有鼠标消息仍需要传输到 Web 浏览器以提供某些功能。

鉴于来自叠加层的消息,我尝试了仅调用较低形式的 WndProc 方法的天真方法。(同样,我尝试将其进一步传递给浏览器控制窗口的 WndProc)。这些方法都不起作用。我还尝试在尝试此操作时将 Message 对象的 HWnd 参数简单地交换为较低表单/浏览器的句柄,但这也没有奏效。

那么,是否有人能够想出更多尝试的方法,或者可能是在表单之间传递 Windows 消息的正确方法?

谢谢,亚历克斯

4

2 回答 2

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

将 MouseClick 事件添加到 Form1

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 回答
0

如何创建一个主窗体,让这两个窗体成为子窗体。将子窗体中的事件委托给主窗体,让主窗体处理您想要处理的任何事件。

于 2010-05-19T17:40:46.633 回答