• 在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里的是一样的。

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

  • 相关阅读:
    【Web】Google Chrome 浏览器调试禁用缓存
    js基础(对象)
    js基础
    css
    html
    mybatis(mapper映射文件)
    mybatis(核心配置文件的配置)
    linux三种连接方式
    spring
    mybatis(入门案例)
  • 原文地址:https://www.cnblogs.com/StupidsCat/p/3161091.html
Copyright © 2020-2023  润新知