以下代码在显示表单之前(透明地)在屏幕上产生黑色闪烁,我想知道我有哪些选项可以消除该闪烁?
Form f = new Form();
f.BackColor = Color.Lime;
f.TransparencyKey = f.BackColor;
f.StartPosition = FormStartPosition.Manual;
f.Bounds = Screen.PrimaryScreen.WorkingArea;
f.Show();
如果我创建一个新项目,将表单的背景设置为 Lime,将 TransparencyKey 设置为 Lime,我会得到相同的结果,然后单击运行。
我尝试过的事情:
将不透明度设置为 99%——同样闪烁
在 OnCreateParams 或使用 SetWindowLong 强制 WS_EX_COMPOSITED - 相同的闪烁
显示较小的窗口,或 0 宽度,或屏幕外,然后移动到所需的位置 - 导致我的窗体后面的窗口无法正确重绘的不良显示问题。
设置 ControlStyles.Opaque、ControlStyles.UserPaint 和其他几个 ControlStyles 组合并覆盖不同的绘制/背景绘制事件——各种结果,或者相同的闪烁、更严重的闪烁或表单不透明。
迁移到 WPF 可能是一种选择,但并不是真正寻找“使用 WPF”作为答案。