.net WebBrowser上 移动父窗口

来源:互联网 发布:问卷数据分析步骤 编辑:程序博客网 时间:2024/06/06 07:23

如果父窗口的标题栏隐藏,无法移动,如果WebBrowser覆盖此窗口的话,则鼠标在WebBrowser 上移动时,需要移动父窗口,可以调用SendMessage

public partial class Form10 : Form

    {

        [DllImport("user32.dll")]

        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wparam, int lparam);

        public Form10()

        {

            InitializeComponent();

        }

        private void Form10_Load(object sender, EventArgs e)

        {

            webBrowser1.Url = new Uri("http://www.baidu.com");

            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

        }

        void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

        {

            webBrowser1.Document.MouseDown += new HtmlElementEventHandler(Document_MouseDown);

        }

        void Document_MouseDown(object sender, HtmlElementEventArgs e)

        {

            SendMessage(Handle, 0x00A1, 2, 0);//拖动窗体

        }

}


注:以上会导致所有可输入控件的鼠标事件都执行Document_MouseDown,可根据webBrowser1.Document.GetElementById 将个别背景或指定控件注册Document_MouseDown事件。


另外,如果是窗口边框隐藏,则鼠标在窗口上移动时,需要移动窗口时,可以有如下方法:

1.如上例SendMessage

protected override void OnMouseDown(MouseEventArgs e)

        {

            base.OnMouseDown(e);

            if (e.Button == MouseButtons.Left)//按下的是鼠标左键

            {

                Capture = false;//释放鼠标,使能够手动操作

                SendMessage(Handle, 0x00A1, 2, 0);//拖动窗体

            }

        }

2.捕捉Windows消息

protected override void WndProc(ref Message m)

        {

            switch (m.Msg)

            {

                case 0x0201://鼠标左键按下的消息

                    m.Msg = 0x00A1;//更改消息为非客户区按下鼠标

                    m.LParam = IntPtr.Zero;//默认值

                    m.WParam = new IntPtr(2);//鼠标放在标题栏内

                    break;

            }

            base.WndProc(ref m);

        }


原创粉丝点击