c# - C# Windows10 | TransparencyKey 不适用于子表单
问题描述
子窗口允许从 Windows 8 WS_EX_LAYERED 窗口样式开始。
我正在尝试使用 Form.TransparencyKey 创建一个具有透明背景的表单,该表单将是另一个窗口的子窗口。为了清楚起见,我现在尝试制作这样的对象树:Form(Form1)->Panel(pnlVideo)->Form(frmOverlay)。
代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Test1();
}
public void Test1()
{
// create form with transparent background
Form frmOverlay = new Form();
frmOverlay.TopLevel = false;
frmOverlay.Parent = pnlVideo;
frmOverlay.Text = "Overlay";
frmOverlay.Top = 0;
frmOverlay.Left = 0;
frmOverlay.Width = pnlVideo.Width / 2;
frmOverlay.Height = pnlVideo.Height;
frmOverlay.BackColor = Color.Black;
frmOverlay.FormBorderStyle = FormBorderStyle.None;
frmOverlay.ShowInTaskbar = false;
frmOverlay.ControlBox = false;
Label label1 = new Label();
label1.Parent = frmOverlay;
label1.BackColor = frmOverlay.BackColor;
label1.AutoSize = true;
label1.Top = 0;
label1.Left = 0;
label1.Text = "TRANSPARENT LABEL\r\nSecond line\r\nThird line";
label1.ForeColor = Color.Blue;
frmOverlay.TransparencyKey = frmOverlay.BackColor;
frmOverlay.Show();
}
}
此代码运行良好,但 frmOverlay 没有透明背景 - 它只是黑色(屏幕截图)。通过 Spy64 查看窗口样式,我可以看到 ExStyle 不包含 WS_EX_LAYERED 样式。
我在 Windows 10 上运行它,所以我想它应该可以工作。如果我离开 frmOverlay 顶层并且没有父级,那么 TransparencyKey 会按预期工作。
我哪里错了?
解决方案
推荐阅读
- ios - 在 MainView 上隐藏 StatusBar 和 NavigationBar 但在 Swift 的 DetailView 上显示它
- c++ - 如何解析包含 unicode 文字的 std::string?
- python - Anaconda 导航器打开虚拟环境 jupyter
- php - 从列相同的 2 个表中选择数据,查询不太正确?
- html - chartjs tooltip html:使用数据填充工具提示
- swift - 以卡片形式呈现时核心数据未保存
- java - 替换所有匹配给定模式的匹配项
- python - 熊猫:从另一列的子集字典创建列
- sql - Snowflake 在显示结果时自动压缩位于字符串中间的多个连续空格
- ubuntu-20.04 - 错误:在 ubuntu 20.04 上的 imc 0 上禁用了 edac skx ecc