第一步:首先引用DLL
在窗体中继承DevComponents.DotNetBar.OfficeForm
public partial class MainForm : DevComponents.DotNetBar.OfficeForm
初始化程序中添加 this.EnableGlass = false;
public MainForm() { this.EnableGlass = false; InitializeComponent(); }
第二步:重绘标题栏
this.FormBorderStyle = FormBorderStyle.None;
先将原生窗体设置成无边框,FormBoderStyle设置成None
然后添加一个panpel控件设置成窗体的的标题栏,并将panel的dock属性设置为Top;
然后添加四个labell控件充当标题和最小化最大化关闭按钮。
此时界面的原型就出来了。
第三步:最小最大关闭事件
注册事件
this.panelEx1.MouseDown += panel1_MouseDown; this.MouseDown += MainForm_MouseDown;
为事件添加处理方法
private void MinFormLabel_Click(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; }
private void MaxFormLabel_Click(object sender, EventArgs e) { if (this.WindowState != FormWindowState.Maximized) { this.WindowState = FormWindowState.Maximized; } else { this.WindowState = FormWindowState.Normal; } }
private void CloseFormLabel_Click(object sender, EventArgs e) { this.Close(); }
第四步:窗体拖动
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
private const int WM_NCLBUTTONDOWN = 0xA1; // 定义鼠标左键按下
private const int HTCAPTION = 2;
private void MainForm_MouseDown(object sender, MouseEventArgs e)
{
// 为当前应用程序释放鼠标捕获
ReleaseCapture();
// 发送消息 让系统误以为在标题栏上按下鼠标
SendMessage((IntPtr)this.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
// 为当前应用程序释放鼠标捕获
ReleaseCapture();
// 发送消息 让系统误以为在标题栏上按下鼠标
SendMessage((IntPtr)this.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
运行结果如下:
完整代码下载: