日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C#WinForm制作异形窗体/控件

發(fā)布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#WinForm制作异形窗体/控件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
制作異形窗體或控件的思路一般都是想辦法生成一個region,然后設(shè)置給指定的窗口或控件。生成region的方法有很多,最常用的就是從一幅圖片生成,把該圖片中的透明色部分“摳”掉,剩下的部分作為一個region。設(shè)置窗口或控件的region可以用SetWindowRgn API,不過.NET framework封裝了這個操作,在C#中只要對窗口或控件的Region屬性賦值就可以了。下面我就把我在C#中實現(xiàn)異形窗體的核心代碼貼出來給大家看看,有什么意見盡管提,別客氣哦J 首先,是一個根據(jù)Bitmap對象生成Region的方法: /// <summary> /// 取得一個圖片中非透明色部分的區(qū)域。 /// </summary> /// <param name="Picture">取其區(qū)域的圖片。</param> /// <param name="TransparentColor">透明色。</param> /// <returns>圖片中非透明色部分的區(qū)域</returns> private Region BmpRgn(Bitmap Picture, Color TransparentColor) { int nWidth = Picture.Width; int nHeight = Picture.Height; Region rgn = new Region(); rgn.MakeEmpty(); bool isTransRgn;//前一個點是否在透明區(qū) Color curColor;//當前點的顏色 Rectangle curRect = new Rectangle(); curRect.Height = 1; int x = 0, y = 0; //逐像素掃描這個圖片,找出非透明色部分區(qū)域并合并起來。 for(y = 0; y < nHeight; ++y) { isTransRgn = true; for (x = 0; x < nWidth; ++x) { curColor = Picture.GetPixel(x,y); if(curColor == TransparentColor || x == nWidth - 1)//如果遇到透明色或行尾 { if(isTransRgn == false)//退出有效區(qū) { curRect.Width = x - curRect.X; rgn.Union(curRect); } } else//非透明色 { if(isTransRgn == true)//進入有效區(qū) { curRect.X = x; curRect.Y = y; } }//if curColor isTransRgn = curColor == TransparentColor;???? }//for x }//for y return rgn; } 原理很簡單,就是對該圖片逐行掃描,在每一行中把那些非透明色的矩形(只有一個像素高)合并(union)到一個Region對象中,當掃描完整個圖片,得到的也就是我們想要的Region了。這種算法在很多文章里都有介紹的。 有了region,下面就簡單了: this.Region = BmpRgn(new Bitmap("d://a.bmp"), Color.FromArgb(0, 0, 0)); 上面的代碼就是把d:/a.bmp的輪廓作為主窗口的region的,假設(shè)該圖片的背景黑色(Color.FromArgb(0, 0, 0))。 其實不光是Form,任何控件都可以用這個方法設(shè)置Region,制作出異形控件。
?

總結(jié)

以上是生活随笔為你收集整理的C#WinForm制作异形窗体/控件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。