C#不规则窗体
通过重写窗体的Onpaint方法来加载要在窗体中显示的图片,好象要用到重写方法override写详细点,我之前用的是form.Region=newregion(graph...
通过重写窗体的Onpaint方法来加载要在窗体中显示的图片,好象要用到重写方法override
写详细点,我之前用的是form.Region=new region(graphicpath)
回答好追加分。 展开
写详细点,我之前用的是form.Region=new region(graphicpath)
回答好追加分。 展开
展开全部
一:使用位图文件作为窗口背景
1.先使用绘图软件创建不规则窗体的位图,最好设置单一背景颜色,记好背景颜色。
2.将所选窗体 FormBorderStyle 属性设置为 None。
3.将BackgroundImage 属性设置为先前创建的位图文件。
4.将 TransparencyKey 属性设置为位图文件的背景色。
5.电脑监视器的颜色深度设置应小于 24 位,否则无论 TransparencyKey 属性是如何设置的,窗体的非透明部分都会产生显示问题。
6.由于隐藏了标题栏,需要自己编写移动和关闭窗体的代码。
二:也可自己创建形状背景(如椭圆)此时需重写Onpaint方法
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath();
shape.AddEllipse(0, 0, this.Width, this.Height);
this.Region = new System.Drawing.Region(shape);
}
1.先使用绘图软件创建不规则窗体的位图,最好设置单一背景颜色,记好背景颜色。
2.将所选窗体 FormBorderStyle 属性设置为 None。
3.将BackgroundImage 属性设置为先前创建的位图文件。
4.将 TransparencyKey 属性设置为位图文件的背景色。
5.电脑监视器的颜色深度设置应小于 24 位,否则无论 TransparencyKey 属性是如何设置的,窗体的非透明部分都会产生显示问题。
6.由于隐藏了标题栏,需要自己编写移动和关闭窗体的代码。
二:也可自己创建形状背景(如椭圆)此时需重写Onpaint方法
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath();
shape.AddEllipse(0, 0, this.Width, this.Height);
this.Region = new System.Drawing.Region(shape);
}
展开全部
听我说,你要设置某图片为背景,并且为不规则窗体
是这样的
在你的Form1.cs中首先输入:
protected override void OnPaint(PaintEventArgs e)
{
GraphicsPath graphicpath = CalculateControlGraphicsPath(bitmap);
this.Region = new Region(graphicpath );
}
因为graphicpath是你所选的图片的区域,所以要用一些方法
public GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
{
GraphicsPath graphicpath = new GraphicsPath();
Color tran = bitmap.GetPixel(0, 0);
for (int row = 0; row < bitmap.Height; row++)
{
for (int wid = 0; wid < bitmap.Width; wid++)
{
if (bitmap.GetPixel(wid, row) != tran)
{
graphicpath.AddRectangle(new Rectangle(wid, row, 1, 1));
}
}
}
return graphicpath;
}
差不多就可以了,因为每张图片做为窗体背景,背景色都为白色,我们遍历所有区域,如果有哪个区域不是白色,就是我们要选择的区域
我这么说,你大概懂了吧
是这样的
在你的Form1.cs中首先输入:
protected override void OnPaint(PaintEventArgs e)
{
GraphicsPath graphicpath = CalculateControlGraphicsPath(bitmap);
this.Region = new Region(graphicpath );
}
因为graphicpath是你所选的图片的区域,所以要用一些方法
public GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
{
GraphicsPath graphicpath = new GraphicsPath();
Color tran = bitmap.GetPixel(0, 0);
for (int row = 0; row < bitmap.Height; row++)
{
for (int wid = 0; wid < bitmap.Width; wid++)
{
if (bitmap.GetPixel(wid, row) != tran)
{
graphicpath.AddRectangle(new Rectangle(wid, row, 1, 1));
}
}
}
return graphicpath;
}
差不多就可以了,因为每张图片做为窗体背景,背景色都为白色,我们遍历所有区域,如果有哪个区域不是白色,就是我们要选择的区域
我这么说,你大概懂了吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
private
void
Form1_Paint(object
sender,
System.Windows.Forms.PaintEventArgs
e)
{
System.Drawing.Drawing2D.GraphicsPath
myPath=new
System.Drawing.Drawing2D.GraphicsPath();
myPath.AddEllipse(new
Rectangle(new
Point(0,0),this.ClientSize));
this.Region=new
Region(myPath);
}
void
Form1_Paint(object
sender,
System.Windows.Forms.PaintEventArgs
e)
{
System.Drawing.Drawing2D.GraphicsPath
myPath=new
System.Drawing.Drawing2D.GraphicsPath();
myPath.AddEllipse(new
Rectangle(new
Point(0,0),this.ClientSize));
this.Region=new
Region(myPath);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
各位英雄,她的问题就是我的问题
我也有一样的困扰,请各位大侠相助
我也有一样的困扰,请各位大侠相助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询