1.绘制不规则窗体位图
可以使用任意一种你喜欢的作图工具,制作一个有形状的位图,背景使用一种其他的颜色。这个颜色在编程中用得着,所以最好使用一种容易记忆的颜色。
如图下图,本例中使用的背景色为黄色(#ffff00/yellow),文件名为bk.bmp
2.创建windows窗体并设置窗体基本属性
1>新建windows应用程序
2>选中新建的窗体,设置其相应属性:
(1)将 FormBorderStyle 属性设置为 None。
(2)将窗体的 BackgroundImage 属性设置为先前创建的位图文件。不必将文件添加到项目系统中;这将在指定该文件作为背景图像时自动完成。
(3)将 TransparencyKey 属性设置为位图文件的背景色,本例中为黄色。(此属性告诉应用程序窗体中的哪些部分需要设置为透明。)
这时你就可以按F5测试你的程序,可以看到如图所示的窗体。现在窗体还不能拖动,只能通过结束程序,或者alt+F4关闭。下面我们编写相应的代码来实现标题栏的相应功能。
3.编写窗体相关代码(要实现窗口的关闭,移动等操作)
(1)实现窗口关闭
从工具栏中拖进一个按钮,设置其按钮文字为“×”,设置其大小为合适大小。双击该按钮进入其触发时间函数。
写入如下代码:
this.Close(); //关闭本窗体
(2)设置窗体的移动操作,我们要用到两个全局的变量
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
创建该窗体 MouseDown事件的相应处理程序。
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight -
SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}
创建该窗体的 MouseMove事件的相应处理程序
private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X, mouseOffset.Y);
Location = mousePos;
}
}
创建该窗体的MouseUp事件的相应处理程序
private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
(3)加入相应的其他的控件
其他的就是看你自己的需要,来添加控件,实现自己想要实现的功能。本例中添加了一文本框,设置其背景为黄色,所以显示时也成了透明的。
现在,我们就可以生成程序,看一下最后的效果了。
注意:如果监视器的颜色深度设置大于 24 位,则不管 TransparencyKey 属性是如何设置的,窗体的非透明部分都会产生显示问题。若要避免出现这种问题,请确保“显示”控制面板中的监视器颜色深度的设置小于 24 位。当开发具有这种透明功能的应用程序时,请牢记应使您的用户意识到此问题。
从上到下,从左到右的扫描图片,将不是透明色的区域联接起来。
/// <summary>
/// 根据图片创建不规则窗体
/// </summary>
/// <param name="Picture">图象</param>
/// <param name="TransparentColor">透明色</param>
/// <returns>Region对象</returns>
public static Region BmpRgn(Bitmap Picture, Color TransparentColor)
{
int nWidth = Picture.Width;
int nHeight = Picture.Height;
Region rgn = new Region();
rgn.MakeEmpty();
bool isTransRgn;//前一个点是否在透明区
Color curColor;//当前点的颜色
Rectangle curRect = new Rectangle();
curRect.Height = 1;
int x = 0, y = 0;
//逐像素扫描这个图片,找出非透明色部分区域并合并起来。
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)//退出有效区
{
curRect.Width = x - curRect.X;
rgn.Union(curRect);
}
}
else//非透明色
{
if(isTransRgn == true)//进入有效区
{
curRect.X = x;
curRect.Y = y;
}
}//if curColor
isTransRgn = curColor == TransparentColor;
}//for x
}//for y
return rgn;
}
然后设置窗体的Region
this.Region=BmpRgn(bmp,color);
this.BackgroundImage=bmp;
就看到不规则的窗体了
分享到:
相关推荐
在IT行业中,"不规则窗体"通常是指在软件或应用程序设计中,那些形状或边界不是标准矩形的用户界面元素。这些窗体可以是椭圆形、多边形或者其他自定义形状,旨在提供更加独特、视觉吸引人的用户体验,或者是为了适应...
在VB(Visual Basic)编程环境中,不规则窗体是指那些形状不再局限于标准矩形的窗口。常规的VB窗体遵循Windows API的规范,通常呈现为四边直角的形状。然而,通过一些特殊的技术,我们可以创建具有任意形状的不规则...
在C#编程中,WinForms是一个用于构建桌面应用程序的强大框架。它允许开发者创建具有丰富用户界面的...在提供的压缩包文件中,包含了创建不规则窗体的工程文件,可以直接运行查看示例效果,也可以作为学习和开发的起点。
在VB(Visual Basic)编程中,创建不规则窗体是一个有趣且富有挑战性的任务,它涉及到Windows API(应用程序接口)的使用以及图形处理技术。不规则窗体允许开发者设计出打破常规,拥有独特外观和交互体验的应用程序...
"C#不规则窗体(可拖动)"这个主题就涉及到了这样的技术。下面将详细阐述如何在C#中实现这种功能。 首先,我们需要了解常规的Windows窗体。在C#中,通常使用`System.Windows.Forms.Form`类来创建基本的窗口。默认情况...
在Windows Presentation Foundation (WPF) 中,不规则窗体(又称形状窗体或自定义形状窗体)是指那些不遵循标准矩形外观的窗口。这种技术允许开发者创建具有独特视觉效果的应用程序,如心形、星形或其他任意形状的...
在Excel VBA编程中,创建不规则窗体的美化与极酷效果,是提升用户界面体验的重要手段。窗体的美观不仅能够增加用户的操作兴趣,还可以使得程序更加专业和易于接受。下面我们将深入探讨如何利用VBA实现这些功能,包括...
在VB(Visual Basic)编程中,创建不规则窗体是一项高级技术,允许开发者设计出具有非标准形状的应用程序窗口。不规则窗体突破了传统矩形窗口的限制,可以实现如半透明、圆角或者自定义形状的效果,为用户提供更个性...
在C++ Builder 6.0开发环境中,创建不规则窗体(irregular form)是指能够自定义窗口边界的窗体,通常用于实现如半透明、带有复杂形状或动态形状的窗口。这种技术允许开发者打破传统的矩形窗口限制,提供更加个性化...
"C#不规则窗体_实现"这个主题涉及到Windows Forms应用程序中一个独特的特性——自定义形状的窗口,即不规则窗体。不规则窗体允许开发者创建非矩形的窗口,这些窗口可以具有任意形状,超出常规的四边形限制,从而为...
在VC++(Visual C++)开发环境中,创建不规则窗体是实现个性化用户界面的一种方法。不规则窗体,也称为自定义形状窗体,允许开发者摆脱传统的矩形边界,设计出具有多边形或其他非标准形状的窗口。这种技术在游戏、...
在VC++编程环境中,创建不规则窗体是一项高级技术,它允许开发者打破传统的矩形窗口限制,设计出具有个性化形状的窗口,如椭圆、位图或其他自定义形状。这通常涉及到Windows API函数的深入使用,尤其是GDI(Graphics...
在Windows编程中,"VC自定义不规则窗体"是一个高级话题,涉及到Windows API和MFC(Microsoft Foundation Classes)库的深入使用。不规则窗体,即非标准形状的窗口,能够实现各种复杂的界面效果,比如窗口的部分透明...
在C# Winform开发中,创建不规则窗体是一项高级技术,它允许开发者设计出具有非标准形状的应用程序窗口,从而提升用户界面的创新性和吸引力。本文将详细讲解两种实现不规则窗体的方法:UpdateLayeredWindow方式和...
在编程领域,尤其是在Windows应用程序开发中,"不规则窗体"和"异形窗体"是一种独特的设计概念,它们允许开发者创建超出常规矩形形状的窗口界面,为用户提供更加个性化和吸引人的视觉体验。在本篇文章中,我们将深入...
在VC++编程环境中,开发一个不规则窗体(irregular window)是指创建一个不遵循标准窗口边框和标题栏规则的窗口。这种窗体通常用于实现自定义的用户界面元素,比如游戏窗口或者某些特殊应用的界面。在这个“VC不规则...
本示例代码着重展示了如何利用MFC来实现一个不规则形状的窗体,即“不规则窗体”。不规则窗体通常指的是那些形状不再局限于标准矩形的窗口,可以依据特定的图像或其他规则进行绘制,呈现出更为独特的视觉效果。这种...
【Qt不规则窗体的实现】是Qt编程中一种高级的GUI特效,它允许开发者创建具有独特形状和外观的窗口,突破传统矩形边框的限制。Qt提供了两种实现不规则窗体的方法,分别适用于Qt3和Qt4版本。本文将详细介绍如何在Qt中...
"不规则窗体"是指那些不遵循标准矩形形状的窗口,它可以是任意形状,如圆形、星形或其他自定义图形。这样的设计可以为应用程序提供独特的视觉效果和用户体验。 创建不规则窗体的核心在于覆盖WinForm的默认绘图机制...