在C#里實現各種窗口切換特效,多達13種特效


原文:http://www.cnblogs.com/clayui/archive/2011/06/28/2092126.html

預覽:

   

 

 下載

        

         這次clayui給大家帶來了比較實用的東西,因為時間比較倉促,就先放出C#版,目前只有13種特效,如果大家對這個比較喜歡的話,請推薦一下,讓更多的人能分享到這個,我也會繼續更新添加更多特效。

         先說明一下,因為本人對C#也不是特別了解,所以可能會出現一些BUG,請大家能夠反饋給我。由於演示程序里只是添加了普通的C#控件,目前不是很清楚其 他的C#控件,或者一些換膚的東西放上去會不會有問題,不過從原理上來說,這個跟C#的窗口是基本無關的,應該不會有問題。

         目前放出的是一個API庫,C#通過調用API庫的API來實現各種窗口切換效果。

         好的,下面來講解一下如何使用:

         首先,當然還是初始化一下,在Form1_Load里添加:

         IntPtr handle = this.Handle;
         CLAYUI_CSharp_Init(handle);

         釋放clayui的內存當然是在Form1_FormClosed里:

         CLAYUI_CSharp_Release();

         然后需要在2個互相切換的form里各加一個TIMER,這里注意,只能使用單線程的響應UI事件的TIMER,使用多線程的TIMER是會出錯的。

         在TIMER里觸發消息函數里添加:

         IntPtr handle = this.Handle;
         if (IsPlay() == 0)
         {
             EnableControl(1);
             timer1.Stop();
         }
         else
             Redraw(handle, 1);

         這段代碼的意思是判斷是否動畫播放完畢,如果沒有,則調用API:Redraw來繪制窗口,如果播放完畢了就將窗口里的控件都恢復刷新,並讓TIMER停止。

         然后就是點擊某按鈕,觸發窗口切換特效,在button1_Click里:

         IntPtr handle = this.Handle;
         IntPtr h1 = (IntPtr)0, h2 = (IntPtr)0;
         CLAYUI_OnAnimation(handle, 0, 1, 0, 0);
         Form2 f2 = new Form2();
         f2.m_f1 = this;
         f2.ShowDialog();

         先是觸發動畫,然后再顯示form2.

         接下來是FORM2的處理,在Form2_Load里:

         IntPtr handle = this.Handle;

         Form1.MakeWindowTpt(handle, 0);

         讓窗口變得完全透明,然后在Form2_Shown里:

         IntPtr handle = this.Handle;
         IntPtr handle1 = m_f1.Handle;

         //調用API: CLAYUI_InitDialog2,使FORM2和動畫綁定 
         Form1.CLAYUI_InitDialog2(handle, handle1);

         //讓FORM2的所有控件都停止刷新

         foreach (System.Windows.Forms.Control control in this.Controls)
         {
             Form1.WinRedraw(control.Handle, 0);
         }

         //
 啟動TIMER1

         timer1.Start();

         在FORM2里的TIMER消息響應函數timer1_Tick里添加:

         IntPtr handle = this.Handle;
         if (Form1.IsPlay() == 0)
         {
             timer1.Stop();
             foreach (System.Windows.Forms.Control control in this.Controls)
             {
                 Form1.WinRedraw(control.Handle, 1);
             }
             Update();
         }
         else
             Form1.Redraw(handle, 1);

         與FORM1里的是一樣的。

         好的,怎么使用就是這樣了,還是比較簡單的,想實現哪種特效就把對應特效按鈕里的代碼復制過去就能用了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM