.net WebBrowser上 移动父窗口

本文介绍了一种在隐藏窗口标题栏的情况下,通过调用 SendMessage 方法实现 WebBrowser 控件所在窗口的拖动功能。此外还提供了两种处理隐藏窗口边框时进行窗口拖动的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果父窗口的标题栏隐藏,无法移动,如果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);

        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值