在C#中通过设置其区域来制作不规则形状的表单窗口

理论上,您可以通过设置其TransparencyKey属性来使表单的某些部分消失,从而

制作出形状表单。

实际上,此功能在 .NET 的最新版本中出现了错误,因此它并不总是在每台计算机上都能正常工作。

另一种方法是创建一个定义窗体形状的区域,然后将窗体的Region属性设置为该区域。

示例程序使用以下代码使其形式呈现星形。

cs 复制代码
private void Form1_Load(object sender, EventArgs e)
{
    // Make points to define a polygon for the form.
    PointF[] pts = new PointF[10];
    float cx = (float)(this.ClientSize.Width * 0.5);
    float cy = (float)(this.ClientSize.Height * 0.5);
    float r1 = (float)(this.ClientSize.Height * 0.45);
    float r2 = (float)(this.ClientSize.Height * 0.25);
    float theta = (float)(-Math.PI / 2);
    float dtheta = (float)(2 * Math.PI / 10);
    for (int i = 0; i < 10; i += 2)
    {
        pts[i] = new PointF(
            (float)(cx + r1 * Math.Cos(theta)),
            (float)(cy + r1 * Math.Sin(theta)));
        theta += dtheta;
        pts[i + 1] = new PointF(
            (float)(cx + r2 * Math.Cos(theta)),
            (float)(cy + r2 * Math.Sin(theta)));
        theta += dtheta;
    }

    // Use the polygon to define a GraphicsPath.
    GraphicsPath path = new GraphicsPath();
    path.AddPolygon(pts);

    // Make a region from the path.
    Region form_region = new Region(path);

    // Restrict the form to the region.
    this.Region = form_region;
}

代码使用循环初始化一个数组,其中包含定义星形的点。

它创建一个 GraphicsPath 并使用其AddPolygon方法将由点定义的多边形添加到路径。

然后它根据GraphicsPath创建一个Region并设置窗体的Region属性。

位于区域之外的表单部分将被剪裁,因此它们不会出现,也不会响应鼠标事件。

但是,表单的系统命令仍然有效,因此您仍然可以通过按 Alt+F4 关闭表单。

(简单结束)

相关推荐
码农葫芦侠1 分钟前
Qt 跨线程内存管理陷阱:QSharedPointer、deleteLater() 与 QPointer 的致命组合
开发语言·数据库·qt
d111111111d5 分钟前
C语言中,malloc和free是什么,在STM32中使用限制是什么,该如何使用?
c语言·开发语言·笔记·stm32·单片机·嵌入式硬件·学习
网安_秋刀鱼8 分钟前
【java安全】shiro鉴权绕过
java·开发语言·安全
李白同学13 分钟前
Linux:调试器-gdb/cgdb使用
linux·服务器·c语言·c++
白昼流星!15 分钟前
C++内存四区与new操作符详解
开发语言·c++
tyatyatya15 分钟前
MATLAB三维绘图教程:plot3/mesh/surf/contour函数详解与实例
开发语言·matlab
十五年专注C++开发16 分钟前
标准C++操作文件方法总结
开发语言·c++·文件操作·ifstream
浔川python社23 分钟前
《C++ 小程序编写系列》(第四部):实战:简易图书管理系统(类与对象篇)
java·开发语言·apache
浔川python社27 分钟前
《C++ 小程序编写系列》(第五部):实战:多角色图书管理系统(继承与多态篇)
开发语言·c++
CC.GG43 分钟前
【Qt】信号和槽
开发语言·数据库·qt