当模态对话框显示时淡化背景

4
当关闭Windows XP系统时,它会显示一个模态对话框,同时背景会变为灰度。我希望在标签列表中的任何编程语言中实现相同的效果。有人能帮忙吗?

你是指应用程序的背景,还是整个屏幕? - George Duckett
我的应用程序,但如果可以为整个屏幕完成,我会非常感激。 - afaolek
1个回答

7

在Winforms中,这个任务很容易完成。你需要一个没有边框的最大化窗口,它的背景是灰色的,并且使用定时器改变其不透明度。当渐隐完成后,你可以显示一个没有边框的对话框,并使用TransparencyKey使其背景透明。这里是一个实现该功能的示例主窗体:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        this.FormBorderStyle = FormBorderStyle.None;
        this.WindowState = FormWindowState.Maximized;
        this.BackColor = Color.FromArgb(50, 50, 50);
        this.Opacity = 0;
        fadeTimer = new Timer { Interval = 15, Enabled = true };
        fadeTimer.Tick += new EventHandler(fadeTimer_Tick);
    }

    void fadeTimer_Tick(object sender, EventArgs e) {
        this.Opacity += 0.02;
        if (this.Opacity >= 0.70) {
            fadeTimer.Enabled = false;
            // Fade done, display the overlay
            using (var overlay = new Form2()) {
                overlay.ShowDialog(this);
                this.Close();
            }
        }
    }
    Timer fadeTimer;
}

并且对话框:

public partial class Form2 : Form {
    public Form2() {
        InitializeComponent();
        FormBorderStyle = FormBorderStyle.None;
        this.TransparencyKey = this.BackColor = Color.Fuchsia;
        this.StartPosition = FormStartPosition.Manual;
    }
    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        this.Location = new Point((this.Owner.Width - this.Width) / 2, (this.Owner.Height - this.Height) / 2);
    }
    private void button1_Click(object sender, EventArgs e) {
        this.DialogResult = DialogResult.OK;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接