在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裏的是一樣的。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章