当前位置:编程学习 > C#/ASP.NET >>

用C#开发类似QQ输入法的不规则窗体的程序详解+代码打包分享

 

QQ窗体是圆角的,Kugoo窗体也是圆角的,QQ的输入法皮肤窗体是不规则的。。。等N多日常使用的程序主窗体都不是四四方方的,其实都是调用2D绘画函数按指定的路径画出来的,那么这一课我给入门级学者讲解的是关于C#实现这一功能。

先来看看实现效果(左边的字体也是窗体的一部分):

\

其实其核心就是围绕Drawing2D来实现的,用GraphicsPath的方法GetPixel取左上角的一点的颜色作为我们透明色,然后横坚循环遍历每一个像素坐标点,如果发现其为透明色,则不加入绘制窗体区域。

下面看怎么实现的,看图:

\

关键点:

第一、设置当前窗体为无边框的(this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;);

第二、排除捕获对错误线程的调用,CheckForIllegalCrossThreadCalls = false;

第三、计算位图中不透明部分的边界,代码如下:

 

 

#region //计算位图中不透明部分的边界

        private GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)

        {

            //创建GraphicsPath

            GraphicsPath graphicsPath = new GraphicsPath();

            //使用左上角的一点的颜色作为我们透明色

            Color colorTransparent = bitmap.GetPixel(0, 0);

 

            // 偏历所有行(Y方向)

            for (int row = 0; row < bitmap.Height; row++)

            {

                //第一个找到点的X

                int colOpaquePixel = 0;

                //偏历所有列(X方向)

                for (int col = 0; col < bitmap.Width; col++)

                {

                    //如果是不需要透明处理的点则标记,然后继续偏历

                    if (bitmap.GetPixel(col, row) != colorTransparent)

                    {

                        //记录当前

                        colOpaquePixel = col;

                        ///从找到的不透明点开始,继续寻找不透明点,一直到找到或则达到图片宽度

                        while (col < bitmap.Width)

                            if (bitmap.GetPixel(col++, row) == colorTransparent)

                                break;

                        //将不透明点加到graphicspath

                        graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, row, col - colOpaquePixel - 1, 1));

                    }

                }

            }

            return graphicsPath;

        }

        #endregion

 

 

 第四、设置当前窗体的绘制路径区域

this.Region = new Region(this.CalculateControlGraphicsPath(this.BackgroundImage as Bitmap));
 

代码下载地址 /2011/1106/20111106044816864.rar

 

作者:博客园中的艾伟

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,