首页 >后端开发 >C++ >如何创建一个半透明的圆形控件,其文本不与其他控件重叠?

如何创建一个半透明的圆形控件,其文本不与其他控件重叠?

Susan Sarandon
Susan Sarandon原创
2025-01-22 15:56:09333浏览

How to Create a Translucent Circular Control with Text That Doesn't Overlap Other Controls?

带有文本的半透明圆形控件

问题

在一个项目中,我需要添加一个圆形控件,并在中间显示一些文本。

我的问题是圆圈太小,当我调整它的大小时,它会与其他控件重叠。我希望圆圈的宽度与正方形相同。

或者,如何使控件的背景透明?

解决方案

这是一个从 Control 派生的自定义控件,可以设置为半透明。

界面是一个带颜色的圆圈,可以包含几个数字。

该控件公开了以下自定义属性:

Opacity(不透明度): 控件背景的不透明度级别 [0, 255]
InnerPadding(内部填充): 定义圆圈边界的内部矩形与控件边界之间的距离。
FontPadding(字体填充): 文本与内部矩形之间的距离。

通过重写 CreateParams,然后设置 ExStyle |= WS_EX_TRANSPARENT; 来实现透明度。

Control.SetStyle() 方法用于修改控件行为,添加以下 ControlStyles:

ControlStyles.Opaque: 防止绘制控件的背景,因此它不受系统管理。与 CreateParams 结合使用,将控件的扩展样式设置为 WS_EX_TRANSPARENT,控件将变得完全透明。
ControlStyles.SupportsTransparentBackColor: 控件接受其背景颜色的 Alpha 值。如果不也设置 ControlStyles.UserPaint,它将不会用于模拟透明度。我们将通过其他方法自己来做。

要查看其工作原理,请创建一个新的类文件,用此代码替换其中的所有代码,保留命名空间并构建项目/解决方案。

新的自定义控件将出现在工具箱中。将其拖放到窗体上。根据需要修改其自定义属性。

控件的可视化表示:

注意和免责声明

  • 这是一个原型控件,缺少自定义设计器(无法在此处发布,代码太多,也与框架相关联)。
  • 按此处的介绍,它可以完全与窗体或其他容器中的其他控件重叠。此简化实现中未处理部分重叠。
  • 字体硬编码为 Segoe UI,因为此字体具有基线,可以简化圆形区域中间文本的位置。
  • 其他字体具有不同的基线,需要更复杂的处理。

以上是如何创建一个半透明的圆形控件,其文本不与其他控件重叠?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn