PowerPoint加载项以幻灯片形式写在幻灯片上

时间:2015-04-21 16:57:30

标签: c# windows vsto add-in

在编写PowerPoint插件时,我需要在幻灯片放映的屏幕上绘制一些内容。 我可以绘制线条和图像,但它们几乎立即消失。

示例代码:

private void Application_SlideShowBegin(PowerPoint.SlideShowWindow Wn)
{
    using (var g = Graphics.FromHwnd((IntPtr)Wn.HWND))
    {
        g.DrawLine(new Pen(Color.Red, 10), new System.Drawing.Point(100, 100), new System.Drawing.Point(200, 300));
        Image img = Properties.Resources.img;
        g.DrawImageUnscaled(img, new Rectangle(250, 250, img.Width, img.Height));
    }
}

知道如何在屏幕上保留绘制的线条/图像吗?

1 个答案:

答案 0 :(得分:0)

我应该早点看到它 - 这是关于刷新的。代码需要稍后运行,因此如果油漆延迟,则绘图将保留在窗口上。 以下示例现在按预期工作:

private Timer _Ticker = new Timer();
private PowerPoint.SlideShowWindow _SlideshowWindow = null;

private void Application_SlideShowBegin(PowerPoint.SlideShowWindow Wn)
{
    _SlideshowWindow = Wn;
    _Ticker.Interval = 30;
    _Ticker.AutoReset = true;
    _Ticker.Elapsed += Ticker_Elapsed;
    _Ticker.Enabled = true;
}

    private void Ticker_Elapsed(object sender, ElapsedEventArgs e)
    {
        if (_Ticker.Enabled)
        {
            using (var g = Graphics.FromHwnd((IntPtr)_SlideshowWindow.HWND))
            {
                g.DrawLine(new Pen(Color.Red, 10), new System.Drawing.Point(100, 100), new System.Drawing.Point(200, 300));
                Image img = Properties.Resources.img;
                g.DrawImageUnscaled(img, new Rectangle(250, 250, img.Width, img.Height));
            }
            _Ticker.Enabled = false;
            _Ticker.Elapsed -= Ticker_Elapsed;
        }
    }