zoukankan      html  css  js  c++  java
  • 在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里的是一样的。

             好的,怎么使用就是这样了,还是比较简单的,想实现哪种特效就把对应特效按钮里的代码复制过去就能用了。

  • 相关阅读:
    一张图片入门Python
    4.1. 如何在Windows环境下开发Python
    你必须知道的EF知识和经验
    XUnit的使用
    如何使用NUnit
    Entity Framework 不支持DefaultValue
    Have You Ever Wondered About the Difference Between NOT NULL and DEFAULT?
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details
    Entity Framework 与多线程
    sqlite中的自增主键
  • 原文地址:https://www.cnblogs.com/StupidsCat/p/3161091.html
Copyright © 2011-2022 走看看