`
yiyeqinghuasoon
  • 浏览: 659005 次
文章分类
社区版块
存档分类
最新评论

用C#实现不规则窗体

 
阅读更多


作者:光脚丫思考 524130780@QQ.COM
文档创建时间:1/1/2010 9:52:59 PM

如何实现不规则窗体?
TransparencyKey:获取或设置将表示窗体透明区域的颜色。
FormBorderStyle:获取或设置窗体的边框样式。
BackgroundImage:获取或设置在控件中显示的背景图像。

首先,使用图像处理软件制作出所要实现的窗体样式,最后实现的窗体样式就和绘制的图片一样。然后,将窗体的BackgroundImage属性设置为所绘制的图片。根据图片的大小设置窗体的大小,即窗体的宽度等于图片的宽度,窗体的高度等于图片的高度。之所以这样做,是为了避免背景图片在窗体上的重复显示。
接着,将窗体的FormBorderStyle设置为None,也即不要显示窗体的边框。这样便只显示带有背景的窗体内容区,此时看起来整个窗体就和所指定的背景图片一致。但是此时实现的窗体样式仍然是规规矩矩的四边形。只要将图片中的背景颜色修改为透明色,那么整个窗体的样式就和图片中的绘图区域保持一致了。要实现这点可以将窗体的TransparencyKey设置为图片的背景颜色,这样以来,当窗体运行时,窗体的背景图片中包含此颜色的区域都将被透明化。(应该是这样的,可是实现的代码中貌似不是这样的,那个背景色还是存在的。)
还有一点,由于将窗体的FormBorderStyle设置为None,窗体便没有了标题栏,因此默认情况下窗体不可移动。下面将自己实现窗体的移动效果。


如何实现窗体的移动?
Location:设置或获取窗体在屏幕中的位置。
通过修改Location的属性值达到修改窗体在屏幕中位置的目的。通常是通过单击鼠标左键并移动鼠标来移动窗体的。也就是说,鼠标在窗体上移动的情况至少有2种,其一是不单击鼠标左键的移动,此时代码不需要随着鼠标的移动来移动窗体;其二是单击鼠标左键的同时移动鼠标,此时就需要跟随鼠标来移动窗体了。要实现的要过和通过窗体标题栏移动是一样的,只是我们要让它在窗体的任意区域都能够移动。
可以通过Control.MousePosition属性获取鼠标单击左键时的坐标,此坐标属于屏幕坐标系统。同样的,窗体的Location也是屏幕坐标系统,这和窗体上的控件的Location是不一样的,控件的Location是窗体范围内的坐标系统,即,坐标X值和坐标Y值是相对于窗体左上角X=0,Y=0的位置而确定的。而Control.MousePosition和窗体的Location则是相对于屏幕左上角的位置而言的。
知道了鼠标左键单击时所处的屏幕坐标点,也知道窗体左上角在鼠标左键单击时的屏幕坐标点,通过这2个坐标点就可以计算出窗体左上角相对于鼠标单击时的屏幕坐标点的偏移量。然后,随着鼠标的不断移动,代码随时获取鼠标移动后所处的屏幕坐标点,将这个新的坐标点和前面计算出的偏移量再次进行计算,就可以获取屏幕随着鼠标移动后应处的位置,再把这个值赋给窗体的Location属性,窗体不就随着鼠标而移动了吗!!!^_^

代码如下:

首先定义两个似有变量,一个用来保存鼠标单击点和窗体左上角的偏移量,一个用来标记鼠标左键是否正处于按下状态。


当鼠标在窗体上单击左键时,获取鼠标此时的屏幕坐标值,并与窗体的Location进行计算,得出偏移量。


接着就该开始移动鼠标了,在移动鼠标时确定按下鼠标左键,然后获取鼠标移动后的坐标值,与前面计算的偏移量进行计算,得出窗体左上角的屏幕坐标值,并将其赋给窗体的Location。

代码中为什么偏移量的X、Y值都取负值呢?这是由窗体左上角位置和鼠标单击时位置的对应关系确定的。既然是在窗体上单击鼠标,那么其单击点的X和Y值就必定要比窗体左上角的X和Y值大,取负值实际上等于是减去偏移量的值。

当鼠标左键松开时,就该停止移动窗体了。

把IsMouseLeftButtonDown设置为false之后,鼠标的MouseMove事件还是会继续触发的,只是将不会在执行移动窗体的那段代码,因为If条件已经不成立了。

搜索了一下前面的那个位图的背景色不能被去掉的问题,有说法是这样的:在24位色以下的环境中可以显示正常,但在24位色以上时黄色背景不能消失。为了确认这种说法的正确性,我将【屏幕的颜色质量】设置16位,还真就给正确显示了。不过16位的颜色质量确实是不及32位的。总不能为了运行这个不规则的窗体程序,每次都来修改屏幕颜色质量吧?那也太过分了一点!当然可以自己编写代码来解决这个问题,但此文到此为止。^_^

完整代码如下:

分享到:
评论

相关推荐

    C#创建不规则窗体

    在C#编程中,WinForms是一个用于构建桌面应用程序的强大框架。它允许开发者创建具有丰富用户界面的...在提供的压缩包文件中,包含了创建不规则窗体的工程文件,可以直接运行查看示例效果,也可以作为学习和开发的起点。

    不规则窗体不规则窗体不规则窗体

    不规则窗体的设计与实现涉及到了图形用户界面(GUI)开发、图形渲染技术以及可能的自定义控件编程。 一、图形用户界面(GUI)设计 GUI设计是软件开发的重要组成部分,它决定了用户与软件交互的方式。不规则窗体的...

    详解使用C#制作不规则窗体的方法

    在C#编程环境中,制作不规则窗体是指创建形状不局限于矩形的窗口,这种窗体可以具有自定义的形状,比如圆形、心形或者其他任意图形。传统的Windows应用程序通常使用矩形窗口,但通过特定的技术,我们可以打破这个...

    C# winfrom 不规则窗体实例

    实现C# Winform不规则窗体主要涉及到以下几个关键知识点: 1. **GDI+绘图**:GDI+(Graphics Device Interface Plus)是Windows API的一部分,提供了丰富的图形绘制功能。在C#中,我们可以利用`System.Drawing`命名...

    C#不规则窗体(可拖动)

    "C#不规则窗体(可拖动)"这个主题就涉及到了这样的技术。下面将详细阐述如何在C#中实现这种功能。 首先,我们需要了解常规的Windows窗体。在C#中,通常使用`System.Windows.Forms.Form`类来创建基本的窗口。默认情况...

    C#不规则窗体_实现

    "C#不规则窗体_实现"这个主题涉及到Windows Forms应用程序中一个独特的特性——自定义形状的窗口,即不规则窗体。不规则窗体允许开发者创建非矩形的窗口,这些窗口可以具有任意形状,超出常规的四边形限制,从而为...

    C#创建不规则窗体的几种方式

    ### C#创建不规则窗体的几种方式 在C#编程中,创建不规则形状的窗体是一项富有创意且实用的技术。通常情况下,Windows窗体应用程序中的窗体都是矩形的,但有时为了达到特定的设计效果或用户体验需求,开发者可能...

    C# winForm不规则窗体的实现

    总结来说,实现C# WinForms不规则窗体主要涉及对`Region`属性的使用,通过设置该属性,结合自定义的背景图像,可以创造出独特的、非矩形形状的窗体。虽然这种方法可能需要更多的代码和资源管理,但它为应用程序带来...

    c# .net 不规则窗体,无毛边

    综上所述,实现“c# .net 不规则窗体,无毛边”的技术涉及到Windows API的深入理解,自定义绘图,以及对窗体区域、双缓冲和性能优化的掌握。通过学习和实践这些知识点,开发者可以创建出更加独特且美观的用户界面。...

    c#不规则透明窗体

    在Windows操作系统中,常规的窗体通常遵循矩形或方形的形状,但不规则窗体可以拥有任何自定义的形状,比如圆形、心形或者其他复杂的图形。这通过覆盖窗体的Paint事件并绘制自定义形状来实现。 接着,让我们谈谈...

    C#实现的不规则窗体

    这是一个实现不规则窗体的源代码,很实用,也很简单

    C#不规则窗体实现

    总之,C#不规则窗体实现主要涉及到窗体的自绘以及事件处理,通过重写`OnPaint`方法绘制非矩形形状,并利用鼠标事件实现可移动性。在实际项目中,你可以根据需求调整形状,增加更多的交互功能,或者添加图像元素以...

    c#创建不规则窗体(窗口)的几种方法

    ### C# 创建不规则窗体的方法详解 #### 一、通过重写Paint事件实现自定义形状窗体 在C#中创建不规则形状的窗体可以通过重写`Paint`事件来实现。这种方法允许开发者自由地定义窗体的形状,而不仅仅局限于矩形。 **...

    C# 不规则窗体 C# 不规则窗体

    总结来说,C#中实现不规则窗体涉及多个步骤,包括重写`OnPaint`绘制形状,使用Windows API设置窗体区域,以及可能的透明度处理。通过这些技术,开发者可以创造出独具特色的用户界面,为应用程序增添亮点。不过,设计...

    用C#绘制不规则窗体示例

    本示例将深入探讨如何使用C#来绘制不规则窗体。 首先,我们需要了解的是Windows窗体(WinForms)的基础知识。WinForms是.NET Framework的一部分,提供了一个用于构建桌面应用程序的用户界面平台。在WinForms中,...

    C#不规则窗体制作教程

    ### C#不规则窗体制作教程 在C#开发中,创建不规则形状的窗口能够为应用程序增添独特的视觉效果,并提升用户体验。本文将详细介绍如何利用C#和Windows Forms技术来实现这种功能,包括如何设置窗口的透明度、如何...

    C#制作不规则窗体例子

    不规则窗体的实现主要依赖于Windows API(应用程序接口)和.NET Framework提供的支持。Windows API中的`SetWindowRgn`函数是关键,它允许我们设置窗口的区域,从而定义其非矩形的形状。在C#中,我们可以使用P/Invoke...

    C# Winform不规则窗体的实现

    ### C# Winform不规则窗体的实现 在C# Winform开发中,创建具有特殊形状(即非矩形)的窗体是一项有趣且实用的技术。这种技术不仅可以增强应用程序的视觉效果,还可以为用户提供更加独特和友好的交互体验。本文将...

    不规则窗体——C#气泡窗体实现方法源代码

    C#实现不规则窗体的方法主要依赖于Windows API(应用程序接口)调用,因为.NET Framework的标准控件并不直接支持此类功能。下面将详细探讨如何利用C#实现不规则气泡窗体。 首先,我们需要引入P/Invoke(平台调用)...

Global site tag (gtag.js) - Google Analytics