背景图片上面有按钮,我把按钮设置成透明,但是背景按钮图片上的圆角体现不出来.
解决方案 »
- 请教一个客户端,定时接受数据处理的问题
- vs2010引用DLL文档后,怎么查看和在哪查看DLL的生成的代码文件
- dll中修改c#传入的结构值
- 请教一个优化的方案
- 字符串"你好1;"或者"你好1;你好2;你好3;"怎么拆分成数组?
- 请教个读取数据的问题
- 怎么在页面刷新以后还能保存数据呀?(很简单,解决就给分)
- 利用计算机日志实现保密系统该怎么做?
- 请问象“动网免费论坛“这样的后台代码是多少钱啊?第一次外接活,望指点??
- 能通俗的讲一下C#中的事件吗?看了两本书上这方面知识点也没有能弄多大明白。谢谢
- vc#2008中有个 WpfBrowserApplication这是啥程序?
- 在c#中sql 的identity值如何重设
下面我的方法是去掉所有白色的部分,你应该用透明色代替我的白色,这样就可以根据这个控件的背景图的不透明部分创建任意形状的按钮了private void ChangeRegion()
{
#region 这段代码是为了根据颜色创建平滑的圆角矩形控件,也可以使用OnPaint里面注释掉的代码创建圆角矩形控件,但是不够平滑
//创建一个空的临时Region
Region thisRegion = new Region();
thisRegion.MakeEmpty(); //创建一个高度为1的矩形
Rectangle curRect = new Rectangle();
curRect.Height = 1; int x = 0, y = 0;
bool isWhite = false;
Color curColor; //获取当前窗体的图像
Bitmap bt = new Bitmap(this.Width, this.Height);
this.DrawToBitmap(bt, new Rectangle(0, 0, this.Width, this.Height));
//逐像素扫描这个图片,找出白色部分区域并合并起来。
for (y = 0; y < this.Height; ++y)
{
isWhite = true;
for (x = 0; x < this.Width; ++x)
{
curColor = bt.GetPixel(x, y);
if (curColor.ToArgb() == Color.White.ToArgb() || x == this.Width - 1)//如果遇到透明色或行尾
{
if (isWhite == false)//退出有效区
{
curRect.Width = x - curRect.X;
thisRegion.Union(curRect);
}
}
else//非透明色
{
if (isWhite == true)//得到一行里面的第一个非白色点,作为要加入Region的矩形的起点。进入有效区
{
curRect.X = x;
curRect.Y = y;
}
}//if curColor
isWhite = curColor.ToArgb() == Color.White.ToArgb();
}//for x
}//for y this.Region = thisRegion;
#endregion
}