这个我喜欢,可是我们如何用编程来实现这个功能呢?大家知道PNG格式的图片有透明的效果,或许我们可以从这里下手。虽然不能100%模仿Vista,但是作为编程爱好者,这种尝试是值得的。通过学习,使我进一步熟悉了对GDI+的一些使用,有些心得,希望能抛砖引玉,期待您更好的大作诞生。由于本文是缩写,看本文前,请先下载附件代码,否则很多变量名会突然冒出来,会让你看不懂。
一、准备工作
1、先从Vista 系统中截取图片一张,如图所示:
2、用PS将这幅图片分解成上下左右、四个角、最小化、最大化、关闭和中间几个部分,并将图片独立出来保存为透明度为50%的PNG格式图片
3、用VS新建一个C# WinForm项目。将FormBorderStyle 设置为None ,然后在右上角放入三个picturebox,分别放入最小化、最大化、关闭按钮的图片,放在标题栏右侧。其他部分则直接使用GDI+绘制上去。
二、使用GDI+
1、先将上下左右的图片放入资源文件中。定义几个全局变量用于读取这些图片。这些图片可以先放在资源文件中,然后再初始化窗体的时候读取进来。
private Image m_LeftTop;
private Image m_Top;
private Image m_RightTop;
private Image m_Left;
private Image m_Right;
private Image m_LeftBottom;
private Image m_Bottom;
private Image m_RightBottom;
2、如何将图片绘制到界面上,一般有两种方法:
方法一、
Brush brush = new TextureBrush(………);
graph.FillRectangle(……….);
方法二、
graph.DrawImage(………);
其中方法一是使用纹理刷的功能,方法二使用的是直接将图片画到控件上。这里的graph是重绘OnPaint(PaintEventArgs e)中e.Graphics以本软件画顶部的边界为例子。首先我们重写OnPaint()。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
DrawTop(e.Graphics);
}
然后:
private void DrawTop(Graphics graph)
{
Brush brush = new TextureBrush(m_Top, new Rectangle(0, 0, m_Top.Width, m_Top.Height));
g