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