在Windows的图形上绘制下一帧?

时间:2013-09-07 22:22:00

标签: c# winapi paint

我需要在屏幕上绘制一些仅1帧的内容 诸如一行文字之类的东西。

我试图通过移动窗口实现这一点,但我失败了。我无法通过显示/隐藏或移动和移动来让它们仅显示1帧(8-16毫秒)。

有没有办法做到这一点?

(对于好奇的人,我正在为其他人这样做,所以理性化为什么需要这样做是没用的。)

修改:我尝试的最后一件事:

public partial class Form2 : Form
{
    static Random rand = new Random();


    public void ShowString(string s)
    {
        this.label1.Text = s; // Has .AutoSize = true
        this.Size = this.label1.Size;

        var bnds = Screen.PrimaryScreen.WorkingArea;
        bnds.Size -= this.Size;

        this.Location = new Point(rand.Next(bnds.X, bnds.Right), rand.Next(bnds.Y, bnds.Bottom));
    }


    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        timer1.Enabled = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (Location.X != -10000 && Location.Y != -10000)
        {
            Location = new Point(-10000, -10000);

            timer1.Interval = Program.interval; // How long to wait before showing two things.
        }
        else
        {
            timer1.Interval = Program.delay; // For how long to show.

            ShowString("just something to test");
        }
    }
}

在那之前:

public partial class Form2 : Form
{
    static Random rand = new Random();


    public void ShowString(string s)
    {
        this.label1.Text = s; // Has .AutoSize = true
        this.Size = this.label1.Size;

        var bnds = Screen.PrimaryScreen.WorkingArea;
        bnds.Size -= this.Size;

        this.Location = new Point(rand.Next(bnds.X, bnds.Right), rand.Next(bnds.Y, bnds.Bottom));
    }


    public Form2()
    {
        InitializeComponent();

        timer1.Interval = Program.interval;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        timer1.Enabled = true;
    }

    private void Form2_Move(object sender, EventArgs e)
    {
        if (Location.X != -10000 && Location.Y != -10000)
        {
            Thread.Sleep(Program.delay); // Dirty cheat, but I was just trying.
            this.Location = new Point(-10000, -10000);
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        ShowString("just something to test");
    }
}

0 个答案:

没有答案