winform绘制标题栏
时间: 2024-01-07 13:05:31 浏览: 285
在WinForm中绘制标题栏可以通过以下步骤实现:
1. 设置窗体的属性为无边框属性,这可以通过设置窗体的`FormBorderStyle`属性为`None`来实现。
2. 在窗体的`OnPaint`事件中绘制标题栏部分。可以使用`Graphics`对象来绘制标题栏的背景、文字和按钮等元素。
3. 在绘制标题栏时,可以使用`ControlPaint`类提供的方法来绘制标准的标题栏背景和按钮。
4. 实现标题栏的基本功能,例如拖拽窗体、最小化、最大化和关闭等操作。可以通过处理鼠标事件来实现这些功能。
以下是一个示例代码,演示了如何在WinForm中绘制标题栏:
```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
public class CustomForm : Form
{
private const int CaptionHeight = 30; // 标题栏高度
private bool isDragging = false; // 是否正在拖拽窗体
private Point dragStartPoint; // 拖拽起始点
public CustomForm()
{
// 设置窗体的属性为无边框属性
FormBorderStyle = FormBorderStyle.None;
// 设置窗体的大小和位置
Size = new Size(400, 300);
Location = new Point(100, 100);
// 注册鼠标事件
MouseDown += CustomForm_MouseDown; MouseMove += CustomForm_MouseMove;
MouseUp += CustomForm_MouseUp;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 绘制标题栏背景
e.Graphics.FillRectangle(Brushes.LightBlue, 0, 0, Width, CaptionHeight);
// 绘制标题文字
string caption = Text;
Font captionFont = new Font(Font.FontFamily, 12, FontStyle.Bold);
SizeF captionSize = e.Graphics.MeasureString(caption, captionFont);
float captionX = (Width - captionSize.Width) / 2;
float captionY = (CaptionHeight - captionSize.Height) / 2;
e.Graphics.DrawString(caption, captionFont, Brushes.Black, captionX, captionY);
// 绘制关闭按钮
Rectangle closeButtonRect = new Rectangle(Width - 30, 0, 30, CaptionHeight);
ControlPaint.DrawCaptionButton(e.Graphics, closeButtonRect, CaptionButton.Close, ButtonState.Normal);
}
private void CustomForm_MouseDown(object sender, MouseEventArgs e)
{
// 判断鼠标是否按下在标题栏范围内
if (e.Y <= CaptionHeight)
{
isDragging = true;
dragStartPoint = e.Location;
}
}
private void CustomForm_MouseMove(object sender, MouseEventArgs e)
{
// 如果正在拖拽窗体,则移动窗体的位置
if (isDragging)
{
Point dragOffset = new Point(e.X - dragStartPoint.X, e.Y - dragStartPoint.Y);
Location = new Point(Location.X + dragOffset.X, Location.Y + dragOffset.Y);
}
}
private void CustomForm_MouseUp(object sender, MouseEventArgs e)
{
// 停止拖拽窗体
isDragging = false;
}
}
public class Program
{
[STAThread]
public static void Main()
{
Application.Run(new CustomForm());
}
}
```
这段代码创建了一个自定义的窗体类`CustomForm`,继承自`Form`类。在`CustomForm`类中,重写了`OnPaint`方法来绘制标题栏的背景和文字,并处理了鼠标事件来实现窗体的拖拽功能。
阅读全文