簡體   English   中英

定制的Powerpoint幻燈片

[英]Customized Powerpoint slideshow

我只在C#上工作了幾周,卻陷入了線程問題。

我一直在構建一個自定義幻燈片,該幻燈片實現在獨立類處理的winform中托管的.ppt演示文稿。 幻燈片通過另一個程序關閉,該程序顯示車間的動態數據。 需要向第二個程序發送命令以進入全屏模式,因為我無法訪問其源代碼。

使用Setforegroundwindow API,我可以輕松地在兩個應用程序之間進行切換,並通過COM接口控制電源點,但是隨着屏幕大小的改變,轉換非常不穩定。 我想覆蓋一個空白的黑色winform,它會在發生這種過渡時淡入和淡出。 到目前為止,我無法順利完成此操作,我嘗試在單獨的線程上運行漸變形式和過渡,但是我還沒有弄清楚。 如果有人對如何執行此操作有任何建議,將不勝感激。

謝謝。

一想到...

有兩個ppt加載程序。

當前的和正在加載的新的。

保持當前可見並處於活動狀態,直到准備好新的。 然后,一旦准備好新的,就隱藏當前的。 那應該給你一個很好的過渡。

由於將有兩個查看器處於活動狀態,因此將占用更多資源,但是切換應該更流暢。

可能想區分加載與啟動。 這樣,您可以在后台加載並加載后,顯示並啟動ppt。

在研究了一些示例代碼之后,我實現了一個完成該任務的后台工作者。 有關更多信息,請參見msdn-如何:使用后台工作程序

我試圖找到一種更可靠的方法來確保F11命令由應用程序處理,但是現在我已經在Thread.Sleep之前放入了SendKeys。

請隨時發表評論或問題。

[DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    Process p;
    //Process p is initialized: p = Process.Start(@"<path\application.exe>");
    Form2 oForm;

 private void transition()
    {
        BackgroundWorker bw = new BackgroundWorker();
        oForm = new Form2();

        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
        oForm.Show();
        if (bw.IsBusy != true)
        {
            bw.RunWorkerAsync();
        }

    }
    private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {       
        oForm.closethis();
    }
    private void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

            if ((worker.CancellationPending == true))
            {
                e.Cancel = true;                   
            }
            else
            {                   
                SetForegroundWindow(p.MainWindowHandle);
                p.WaitForInputIdle(3000);
                System.Threading.Thread.Sleep(500);
                SendKeys.SendWait("{F11}");    
                //Sends the application into full screen mode           
            }

    }

以及淡入和淡出表格的代碼。

public partial class Form2 : Form
{
    public Form2()
    {
        this.Visible = false;
        this.Opacity = 0;

        InitializeComponent();

        this.TopMost = true; 
        this.Visible = true;

        while (this.Opacity < 1)
        {
           this.Opacity += .05;
           Thread.Sleep(5);
           this.TopMost = true;
        }       
    }
    private void closefade()
    {
        while (this.Opacity > 0)
        {
            this.Opacity -= .05;
            Thread.Sleep(5);
            this.TopMost = true;
        }
        this.Close();
    }

    delegate void CloseBack();
    public void closethis()
    {
        if (this.InvokeRequired)
        {
            CloseBack b = new CloseBack(closethis);
        }
        else
            closefade();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM