【问题标题】:Displaying controls on an alpha-blended form在 alpha 混合表单上显示控件
【发布时间】:2008-09-27 09:50:10
【问题描述】:

我尝试了 Visual C# Kicks code for an alpha-blended form。这有效(只要我删除 TransparencyKey 属性);也就是说,我可以使用 W3C 的 PNG alpha test image 并查看下面的其他窗口,但会使表单上的所有控件不可见。据推测,它们根本没有被绘制,因为OnPaint 被覆盖了。我尝试调用超类的OnPaint

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    UpdateFormDisplay()

    MyBase.OnPaint(e)
End Sub

,但这并没有改变任何东西。 (调用MyBase.OnPaint first 也没有任何区别。)

不幸的是,大多数关于 alpha 混合表单的文章都集中在没有任何控件的纯初始屏幕上——但我们需要一个面板,它首先显示登录字段,然后是进度条。

顺便说一下,控件不需要透明度;只有在外部边缘,PNG 的透明度才真正重要。因此,通过在这一切之上添加另一种形式来伪造这一点(两者总是串联移动)可能就足够了,但我更喜欢更平滑的解决方案。

【问题讨论】:

    标签: winforms .net-2.0 alphablending


    【解决方案1】:

    尝试在 InitializeComponents() 之后将其放入您的表单 ctor;

    base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);

    【讨论】:

    • 没有区别。样式已应用(根据GetStyle),但我仍然看不到任何控件。我还尝试在OnPaint 中使用e.Graphics 手动绘制一些东西,例如:e.Graphics.DrawString("Some text", New Font("Arial", 24, FontStyle.Regular), Brushes.Black, CSng(Me .Width / 2), CSng(Me.Height / 2)) ,也没有出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2010-11-20
    • 2017-03-31
    相关资源
    最近更新 更多