用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));
 

代码下载地址:WindowsFormsApplication1.rar

时间: 2024-07-30 02:54:31

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

java怎样开发类似QQ超炫的界面

问题描述 大家知道java怎样开发类似QQ超炫的界面吗?用swing开发出来的都太难看了怎样美化? 解决方案 解决方案二:用SWT試試解决方案三:也有其他的组件解决方案四:OpenSwing是不是一个更强大的Swing?解决方案五:找个美工做前台....解决方案六:用flex开发解决方案七:引用楼主tian_bian_feixiaoxia的回复: 大家知道java怎样开发类似QQ超炫的界面吗?用swing开发出来的都太难看了怎样美化? 可以的,适当运用图片做背景,另外结合LookAndFeel的

Android开发时在模拟器之间短信的收发详解教程

本文通过运行两个Android模拟器,介绍在Android中如何实现短信服务(SMS,short message service)的功能.通过这个例子,我想带给大家的是:更加熟悉之前介绍过的Android应用程序的概念及技术细节,且通过实例调度大家的兴趣.我之所以选择SMS为例子,主要原因是SMS已经非常成熟了,从中可以发掘更多的信息和技术细节,而且我相信大部分人发短信比打电话多. 1.温故知新 广播接收者:一个广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作出相应的反应.许多广播源

iOS开发:加载、滑动翻阅大量图片解决方案详解

今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏浏览界面的这短暂的1秒内(和后续的几秒),都发生了什么. 开发:加载.滑动翻阅大量图片解决方案详解-"> 常规思路流程 点击任意小图后, 1.首先制作scrollview框架:大小2个scrollview,小的用于手势缩放单一图片,大的横向依次加载全部照片 2.制作好scrollview框架后,加载照片 3.一切准备就绪跳转页面

Windows CE系统开发,BSP包中的几个常见文件详解

Windows CE系统开发,BSP包中的几个常见文件详解 BSP介绍(Board Support Package)是介于底层硬件和上层软件之间的底层软件开发包,它主要功能为屏蔽硬件,提供操作系统及硬件驱动,具体功能包括: (1)      单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持: (2)      为操作系统提供设备驱动程序和系统中断服务程序: (3)      定制操作系统的功能,为软件系统提供一个实时多任务的运行环境: (4)      初始化操作系统,为操作

Android开发之机顶盒上gridview和ScrollView的使用详解_Android

最近在机顶盒上做一个gridview, 其焦点需要在item的子控件上,但gridview的焦点默认在item上,通过 android:descendantFocusability="afterDescendants" <ScrollView android:id="@+id/scroll_content" android:layout_width="1740.0px" android:layout_height="600.0px

Android开发之机顶盒上gridview和ScrollView的使用详解

最近在机顶盒上做一个gridview, 其焦点需要在item的子控件上,但gridview的焦点默认在item上,通过 android:descendantFocusability="afterDescendants" <ScrollView android:id="@+id/scroll_content" android:layout_width="1740.0px" android:layout_height="600.0px

C# 开发类似QQ的通讯软件,如何在软件中实现通过设置代理连接网络。百分求助!请大神帮忙。

问题描述 项目功能描述:给单位内部开发一个CS构架的管理工具(有点类似QQ),因为内部网络环境比较复杂,直连互联网的电脑无问题,但有部分电脑是通过公司OA网络(OA网络是通过一台固定IP的代理服务器与外网链接)因此这部分电脑的客户端只能通过设置代理服务器与架设在公网上的服务端交互(安装在我们OA网络的所有通讯工具也都需要在各自软件中设置代理服务器的IP,端口才能正常使用):问题:如何让自己设计的这款软件也能象QQ一样可以通过设置代理服务器实现与OA网络互通?请大神帮忙解决!主要实现代码priva

【ANDROID游戏开发十三】(保存游戏数据 [下文])详解SQLITE存储方式,并把SQLITE的数据库文件存储在SD卡中!!!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/329.html ----------------------- 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读:

Android开发四大组件Activity/Service/Broadcast Receiver/Content Provider详解

Android开发的四大组件一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重要组件 intent的详解. 一.Activity详解 Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()-->onStart()-->onResume() 当另一个Activity启动时:第一个Activity onPause()-->第二个Activity