一、创建个性窗体
以前, 创建个性化窗体是一个既费时又费人力的过程, 其中涉及
到API 调用和大量的编程工作, 在vs.net 问题变得很简单。创建个性
化窗体的过程有两个要素: 创建成形的窗体, 并编写某些编程逻辑的
代码以允许移动和关闭窗体, 在自定义形状的窗体上没有标题栏, 并
且它本身不具有任何功能, 例如移动窗体以及关闭窗体的能力。因此,
编写一些代码是进行必要的补充。创建个性化窗体的过程:
创建一个个性化形状的窗体步骤:
1.创建一个个性化的单色位图, 将该图的背景设为一种颜色(这种
颜色将被“裁剪掉”), 并且这种颜色要和保留的部分颜色不能相同。所
绘制的形状最终将成为您的窗体, 因此请确保该形状足够大, 以满足
使用的需求。特别提醒一下在选择“背景色”时, 最好选择一种便于记
忆或操作的颜色, 因为这个“颜色”要被用来作为“透明化”的索引颜
色。
2.创建一个新的Windows 应用程序项目。
3.设置以下以下属性:
将FormBorderStyle 属性设置为None。此属性从窗体中移除标
题栏和一些常规的可见部分如边框。将窗体的BackgroundImage 属性
设置为先前创建的位图文件。不必将文件添加到项目系统中; 这将在
指定该文件作为背景图像时自动完成。此属性将该位图图像设置为
窗体的背景。
图2
图1
将TransparencyKey 属性设置为位图文件的背景色。上面设置的
背景图像中的某些和TransparencyKey 属性相同的颜色部分将变“透
明”掉, 而乘下的所看到的部分就是窗体的形状。特别要说明的是如果
监视器的颜色深度设置大于24 位, 则不管TransparencyKey 属性是如
何设置的, 窗体的非透明部分都会产生显示问题。
编写关闭窗体的代码因为在设置FormBorderStyle 属性为None
时,关闭按钮也不可见,可以用增加一个按钮来实现它的功能。
1.向窗体添加一个Button 控件。
2.添加代码, 使用户可通过调用end 或close 方法关闭该窗体。
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Me.end
End Sub
编写移动窗体的代码
1.创建一个在拖动窗体时使窗体移动的过程。输入代码来创建新
的Point 对象。这将作为计算如何移动窗体时的变量。isMouseDown 字
段用于跟踪用户是否按下了鼠标按钮。该窗体应只在用户按下鼠标按
钮时才移动。
Private mouseOffset As Point
Private isMouseDown As Boolean = False
2.创建窗体的MouseDown 事件的事件处理程序。在处理程序中添
加代码, 使用户可以在窗体上的任意位置单击以拖动窗体。输入代码,
以根据鼠标指针的当前位置, 将坐标分配给mouseOffset 变量。在以下
代码中, 请注意偏移位置是使用有关边框大小(FrameBorderSize .
Width) 和标题栏高度(CaptionHeight) 的系统信息进行计算的。在测试
偏移位置时必须考虑这些因素, 因为某些测量结果是使用工作区得出
的, 而另一些测量结果是使用屏幕坐标得出的。因此, 偏移位置等于边
框宽度加上标题高度, 再加上窗体工作区的偏移位置。
Private Sub Form1_MouseDown(ByVal sender As Object, _
ByVal e As MouseEventArgs) Handles MyBase.MouseDown
Dim xOffset As Integer
Dim yOffset As Integer
If e.Button = MouseButtons.Left Then
xOffset = - e.X - SystemInformation.FrameBorderSize.Width
yOffset = - e.Y - SystemInformation.CaptionHeight - _
SystemInformation.FrameBorderSize.Height
mouseOffset = New Point(xOffset, yOffset)
isMouseDown = True
End If
End Sub
3.创建窗体的MouseMove 事件的事件处理程序。输入代码, 单击
鼠标左键并且拖动鼠标时, 窗体的Location 属性将设置为新的位置。
Private Sub Form1_MouseMove(ByVal sender As Object, _
ByVal e As MouseEventArgs) Handles MyBase.MouseMove
If isMouseDown Then
Dim mousePos As Point = Control.MousePosition
mousePos.Offset(mouseOffset.X, mouseOffset.Y)
Location = mousePos
End If
End Sub
4.创建窗体的MouseUp 事件的事件处理程序。输入类似以下内容
的代码。
Private Sub Form1_MouseUp(ByVal sender As Object, _
ByVal e As MouseEventArgs) Handles MyBase.MouseUp
If e.Button = MouseButtons.Left Then
isMouseDown = False
End If
End Sub
二、创建个性化控件
由于控件没有窗体的“TransparencyKey”属性, 因此不能用实现自
定义窗体形状方法来实现自定义控件形状。绘制一个自定义形状的控
件, 我们可以用vs.NET FRAMEWORK 中提供了一个绘制图形类的方
法来完成。可以认为控件就是一个占有一定屏幕面积的自动生成的形
状。.NET Framework 中提供了一系列的类, 来实现这种绘制功能。只要
了解控件的产生( 绘制) 过程, 我们可以来实现产生各种形状的控件。
事实上, 可以认为控件是绘制出一个形状后, 将一系列的控件属性设
置到这个形状上, 一个个性化的控件就形成了。.NET Framework 中提
供了一个GraphicsPath 类, 它可用一系列的直线和曲线来绘制形状。
先用这个类按要求绘制一个形状, 然后将控件的“区域”属性设置到这
个形状上来。这时, 这个形状就“相当于”一个控件了。按下面的步骤就
可完成一个性化的控件,首先创建一个GRAPHICSPATH 类的实例,然 |
|