用C#开发类似QQ输入法的不规则窗体的程序详解+代码打包分享
2011-11-04 17:27
906 查看
QQ窗体是圆角的,Kugoo窗体也是圆角的,QQ的输入法皮肤窗体是不规则的。。。等N多日常使用的程序主窗体都不是四四方方的,其实都是调用2D绘画函数按指定的路径画出来的,那么这一课我给入门级学者讲解的是关于C#实现这一功能。
先来看看实现效果(左边的字体也是窗体的一部分):
其实其核心就是围绕Drawing2D来实现的,用GraphicsPath的方法GetPixel取左上角的一点的颜色作为我们透明色,然后横坚循环遍历每一个像素坐标点,如果发现其为透明色,则不加入绘制窗体区域。
下面看怎么实现的,看图:
关键点:
第一、设置当前窗体为无边框的(this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;);
第二、排除捕获对错误线程的调用,CheckForIllegalCrossThreadCalls = false;
第三、计算位图中不透明部分的边界,代码如下:
第四、设置当前窗体的绘制路径区域
this.Region = new Region(this.CalculateControlGraphicsPath(this.BackgroundImage as Bitmap));
代码下载地址:WindowsFormsApplication1.rar
先来看看实现效果(左边的字体也是窗体的一部分):
其实其核心就是围绕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));
代码下载地址:WindowsFormsApplication1.rar
相关文章推荐
- 程序开发中C#创建不规则窗体代码
- 用C#代码实现类似QQ窗体的“上、左、右”停靠功能
- 用C#代码实现类似QQ窗体的“上、左、右”停靠功能【转】
- 详解C# 网络编程系列:实现类似QQ的即时通信程序
- 详解C# 网络编程系列:实现类似QQ的即时通信程序
- iOS开发之在Xcode代码中插入类似QQ的表情
- VS2010开发程序打包详解
- C#程序开发中经常遇到的10条实用的代码
- C#程序开发中经常遇到的10条实用的代码
- C#程序开发中经常遇到的10条实用的代码
- 黄聪:如何判断VS开发C#是否为设计模式,以免编译之前操作窗体设计器代码自动运行
- C#实现类似qq的屏幕截图程序
- C#学习视频分享与开发技术QQ交流群
- C#实现类似qq的屏幕截图程序 [转载]
- web MVC程序开发增删改查参考代码。思路是面向对象思想,以及在HTML代码中嵌入C#代码
- C#实现类似qq的屏幕截图程序
- C#实现类似qq的屏幕截图程序收藏
- C#程序开发中经常遇到的10条实用的代码
- C#程序开发中经常遇到的10条实用的代码