.NET基础示例系列之十:不规则窗体
在.NET中制做不规则形状的窗体有两种方法,一种是重写onpaint函数,另一种比较简单的方法是使用不规则的图片做背景,然后设置相关的属性。这里介绍的是后者,以及使用这种方法的一些细节问题:
1.首先准备一张不规则的背景图片,例如一张圆角边框的图片
2.新建项目,将窗体FormBorderStyle设置为none,以去掉标题栏。设置BackgroundImage。
3.设置窗体的TransparencyKey属性为图片中圆角边框之外的颜色,窗体在遇到该颜色将显示为透明
通常这种做法是OK的,运行即可看到效果
但是有几个值得注意的问题:
1.所使用的背景图片,圆角边框之外的颜色最好不要使用透明、白色、或黑色。举个例子,使用白色,则TransparencyKey将设置为白色,如果你的窗体上有checkbox一类的控件,你会发现你点不中小框了,因为小框的白色部分此时变为透明。透明、黑色原因相同。在下面的例子中,我用的是黄色。
2.如果你的显示器显示设置高于24位色,会发现TransparencyKey设置不起作用了。这是微软的一个bug,有一种解决办法是,先将背景图片添加到资源文件,然后在窗体构造时为窗体设置背景图片:
Bitmap bmp = AppResource.bg01;
bmp.MakeTransparent(Color.Yellow);
this.BackColor = Color.Yellow;
this.BackgroundImage = bmp;
this.TransparencyKey = Color.Yellow;
3.背景图片最好使用位图,试了试jpg,好像有问题。
以下是代码,包括添加鼠标事件以便可以拖动窗体:
private bool isMouseDown = false;
private Point position;
public MainForm()
{
InitializeComponent();
Bitmap bmp = AppResource.bg01;
bmp.MakeTransparent(Color.Yellow);
this.BackColor = Color.Yellow;
this.BackgroundImage = bmp;
this.TransparencyKey = Color.Yellow;
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void MainForm_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int x = -e.X;
int y = -e.Y;
position = new Point(x, y);
isMouseDown = true;
}
}
private void MainForm_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point newPosition = Control.MousePosition;
newPosition.Offset(position);
this.Location = newPosition;
}
}
private void MainForm_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
关注作者:欢迎扫码关注公众号「后厂村思维导图馆」,获取本人自建的免费ChatGPT跳板地址,长期有效。 原文链接:https://www.cnblogs.com/morvenhuang/archive/2006/10/02/520116.html 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。 |