当前位置:编程学习 > C#/ASP.NET >>

窗体动态效果实现

本人是新手,现在做KTV项目,需要从第一个窗体跳到第二个窗体时,有动态效果,谢谢各位大哥大姐帮忙解决一下,小弟在这里感谢了!!! --------------------编程问答-------------------- 怎么ktv的项目老火了。

http://topic.csdn.net/u/20120303/12/e6bf630d-5b6f-47f2-947b-d9ec1e244c7e.html?77755

下面几个链接下个项目自己去玩玩 --------------------编程问答--------------------
引用 1 楼 xx_mm 的回复:
怎么ktv的项目老火了。

http://topic.csdn.net/u/20120303/12/e6bf630d-5b6f-47f2-947b-d9ec1e244c7e.html?77755

下面几个链接下个项目自己去玩玩


据我了解,这貌似是北大青鸟的第一学期的毕业项目。我勒个去。。。 --------------------编程问答-------------------- 动态效果? lz,想要什么样的动态效果? 不妨加一个进度条,但。。。。这样一来的话,那。。。就不符合现实生活的 KTV 系统了。 --------------------编程问答-------------------- 先找个地方声明如下的Win32 API:

//-- 窗体动画 --//

        /*
            1. AW_SLIDE : 使用滑动类型, 默认为该类型. 当使用 AW_CENTER 效果时, 此效果被忽略
            2. AW_ACTIVE: 激活窗口, 在使用了 AW_HIDE 效果时不可使用此效果
            3. AW_BLEND: 使用淡入效果
            4. AW_HIDE: 隐藏窗口
            5. AW_CENTER: 与 AW_HIDE 效果配合使用则效果为窗口几内重叠,  单独使用窗口向外扩展.
            6. AW_HOR_POSITIVE : 自左向右显示窗口
            7. AW_HOR_NEGATIVE: 自右向左显示窗口
            8. AW_VER_POSITVE: 自顶向下显示窗口
            9. AW_VER_NEGATIVE : 自下向上显示窗口
        */
        public const Int32 AW_HOR_POSITIVE = 0x00000001; // 从左向右显示
        public const Int32 AW_HOR_NEGATIVE = 0x00000002; // 从右向左显示
        public const Int32 AW_VER_POSITIVE = 0x00000004; // 从上到下显示
        public const Int32 AW_VER_NEGATIVE = 0x00000008; // 从下到上显示
        public const Int32 AW_CENTER = 0x00000010;       // 从中间向四周
        public const Int32 AW_HIDE = 0x00010000;         // 隐藏显示
        public const Int32 AW_ACTIVATE = 0x00020000;     // 普通显示
        public const Int32 AW_SLIDE = 0x00040000;        // 滑动显示
        public const Int32 AW_BLEND = 0x00080000;        // 透明渐变显示

        private const int DURATION_OF_TIME = 600;        // 效果持续时间

        [DllImport("user32.dll", EntryPoint = "AnimateWindow", ExactSpelling = true, SetLastError = true)]
        public static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
        
        /// <summary>
        /// 随机动画打开窗体
        /// </summary>
        /// <param name="hwnd">窗体句柄</param>
        public static void RandomAnimateOpenWindow(IntPtr hwnd)
        {
            int animateType = 10;
            Random rand = new Random();
            int dwFlags = (int)rand.Next(animateType);
            switch (dwFlags)
            {
                case 0: // 普通显示
                    // AnimateWindow(hwnd, DURATION_OF_TIME, AW_ACTIVATE);
                    // 透明渐变显示
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_BLEND);
                    break;
                case 1: // 从左向右显示
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_HOR_POSITIVE);
                    break;
                case 2: // 从右向左显示
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_HOR_NEGATIVE);
                    break;
                case 3: // 从上到下显示
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_VER_POSITIVE);
                    break;
                case 4: // 从下到上显示
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_VER_NEGATIVE);
                    break;
                case 5: // 透明渐变显示
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_BLEND);
                    break;
                case 6: // 从中间向四周
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_CENTER);
                    break;
                case 7: // 左上角伸展
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_SLIDE | AW_HOR_POSITIVE | AW_VER_POSITIVE);
                    break;
                case 8: // 左下角伸展
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_SLIDE | AW_HOR_POSITIVE | AW_VER_NEGATIVE);
                    break;
                case 9: // 右上角伸展
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_SLIDE | AW_HOR_NEGATIVE | AW_VER_POSITIVE);
                    break;
                case 10:// 右下角伸展
                    AnimateWindow(hwnd, DURATION_OF_TIME, AW_SLIDE | AW_HOR_NEGATIVE | AW_VER_NEGATIVE);
                    break;
            }
        }

        /// <summary>
        /// 淡入动画打开窗体
        /// </summary>
        /// <param name="hwnd">窗体句柄</param>
        public static void AnimateOpenWindow(IntPtr hwnd)
        {
            AnimateWindow(hwnd, DURATION_OF_TIME, AW_BLEND | AW_ACTIVATE);
        }

        /// <summary>
        /// 淡出动画关闭窗体
        /// </summary>
        /// <param name="hwnd">窗体句柄</param>
        public static void AnimateCloseWindow(IntPtr hwnd)
        {
            AnimateWindow(hwnd, DURATION_OF_TIME, AW_BLEND | AW_HIDE);
        }


然后再做个窗体基类,并调用上述的动画窗体的API:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CodingMouse.MMP.ClassLibrary.Classes;

namespace CodingMouse.MMP.ControlLibrary.Forms
{
    public partial class BaseForm : Form
    {
        public BaseForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 窗体加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BaseForm_Load(object sender, EventArgs e)
        {
            // 淡入动画打开窗体
            Win32.AnimateOpenWindow(this.Handle);
        }

        /// <summary>
        /// 窗体关闭事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BaseForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 淡出动画关闭窗体
            Win32.AnimateCloseWindow(this.Handle);
        }
    }
}



这样你继承这个窗体基类的所有窗体实例都就有动画效果了,具体采用哪种效果你换下API调用方法即可:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Configuration;
using System.Diagnostics;
using CodingMouse.MMP.UI.Common;
using CodingMouse.MMP.ClassLibrary.Classes;

namespace CodingMouse.MMP.UI.Forms
{
    /// <summary>
    /// 用户登录界面
    /// </summary>
    public partial class frmLogin : CodingMouse.MMP.ControlLibrary.Forms.BaseForm
    {
    }
}


调用 Win32 API 实现窗体动态效果在各类语言中方法都是通用的,以前我在VFP中也这样使用,现在在C#还是一个样。 --------------------编程问答--------------------
引用 4 楼 codingmouse 的回复:
先找个地方声明如下的Win32 API:
C# code

//-- 窗体动画 --//

        /*
            1. AW_SLIDE : 使用滑动类型, 默认为该类型. 当使用 AW_CENTER 效果时, 此效果被忽略
            2. AW_ACTIVE: 激活窗口, 在使用了 AW_HIDE 效果时不可使用此效果
            3. A……



不错,学习了!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,