C#:实现窗口动画

使用函数:AnimateWindow

说明:该函数能在显示与隐藏窗口时能产生特殊的效果。

函数原型:

  BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags);

  BOOL AnimateWindow(DWORD dwTime,DWORD dwFlags);

参数说明:

hWnd:指定产生动画的窗口的句柄。

dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。

dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。标志描述:

AW_SLIDE:使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。

AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不要使用这个标志。

AW_BLEND:使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。

AW_HIDE:隐藏窗口,缺省则显示窗口。

AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。

AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。

AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。

AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。

AW_HOR_NEGATIVE:自右向左显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。

各个数值:

const Int32 AW_HOR_POSITIVE = 0x00000001;  
  const Int32 AW_HOR_NEGATIVE = 0x00000002;  
  const Int32 AW_VER_POSITIVE = 0x00000004;  
  const Int32 AW_VER_NEGATIVE = 0x00000008;  
  const Int32 AW_CENTER = 0x00000010;  
  const Int32 AW_HIDE = 0x00010000;  
  const Int32 AW_ACTIVATE = 0x00020000;  
  const Int32 AW_SLIDE = 0x00040000;  
  const Int32 AW_BLEND = 0x00080000;

返回值:

如果函数成功,返回值为非零;如果函数失败,返回值为零。在下列情况下函数将失败:

窗口使用了窗口边界;窗口已经可见仍要显示窗口;窗口已经隐藏仍要隐藏窗口。

备注:

可以将AW_HOR_POSITIVE或AW_HOR_NEGTVE与AW_VER_POSITVE或AW_VER_NEGATIVE组合来激活一个窗口。可能需要在该窗口的窗口过程和它的子窗口的窗口过程中处理WM_PRINT或WM_PRINTCLIENT消息。对话框,控制,及共用控制已处理WM_PRINTCLIENT消息,缺省窗口过程也已处理WM_PRINT消息。

速查:

WINDOWS NT:5.0以上版本:Windows:98以上版本;Windows CE:不支持;头文件:Winuser.h;库文件:user32.lib。

例子:

在C#中,使用AnimateWindow需要导入:using System.Runtime.InteropServices;

接着,在程序中写入该函数相关的数据:

[DllImport("user32.dll", EntryPoint = "AnimateWindow")]//或[DllImport("user32.dll", CharSet=CharSet.Auto)] 或[DllImport("user32.dll")] 
        private static extern bool AnimateWindow(IntPtr handle, int ms, int flags);
        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;

然后,在该窗体中调用即可,例如:

AnimateWindow(this.Handle, 300, AW_CENTER);//从里向外显示

AnimateWindow(this.Handle, 300, AW_HIDE + AW_CENTER);//向内消失效果

                            //可用“+”将效果链接起来

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;//窗体效果需要该包

namespace 软件项目管理系统
{
    public partial class LoginForm : Form
    {
        //窗体弹出或消失效果
        [DllImport("user32.dll", EntryPoint = "AnimateWindow")]
        private static extern bool AnimateWindow(IntPtr handle, int ms, int flags);
        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;

        public LoginForm()
        {
            InitializeComponent();

            //窗体弹出效果
            AnimateWindow(this.Handle, 300, AW_CENTER);
        }

        //“关闭按钮”事件
        private void button1_Click(object sender, EventArgs e)
        {
            //窗体弹出效果
            AnimateWindow(this.Handle, 300, AW_HIDE + AW_CENTER);

            Application.Exit();
        }
    }
}

摘自:http://www.cnblogs.com/KeenLeung/archive/2013/05/19/3087728.html

时间: 2024-10-09 13:30:01

C#:实现窗口动画的相关文章

qt 窗口动画

窗口动画 编辑删除转载 2015-10-10 14:50:27 标签:qt渐变动画 一个应用程序通常包含多个动画,例如,你可能希望同时移动许多graphic items或者一个个按照串行的方式的移动他们 QAnimationGroup:动画组父类,以包含其它animations,这样这些animations可以串行或者并行的触发了 QSequentialAnimationGroup:串行动画 QParallelAnimationGroup:并行动画 QPropertyAnimation?:动画类

Ubuntu启用3D桌面和更多的窗口动画

Ubuntu(确切的说是Ubuntu天朝定制版简称优麒麟)才是我最早接触的一个Linux发行,比较搞笑的是,那个时候我还坐在网吧玩星际2. 刚开始玩的时候,尤其喜欢优麒麟那个窗口动画以及在切换的时候那些特效和3D桌面还有像苹果机上的Docky,切来换去的骚包得很.当然,现在也还是喜欢Docky. 要启用3D桌面,过程是很简单的. 注: 无论是3D桌面还是窗口扭曲的动画特效,kde桌面环境都已提供.而在unity桌面环境还需要手动配置才行.为了更好的折腾这些,切换到闭源显卡驱动(闭源驱动可以在设置

Qt之窗口动画(下坠、抖动、透明度)

简述 前面几节中我们介绍了关于动画的基本使用,有属性动画.串行动画组.并行动画组.这节我们来实现一些特效,让交互更顺畅. 简述 示例 效果 源码 更多参考 示例 下面,我们以geometry.pos.windowOpacity属性为例,来实现窗体的下坠.抖动.透明度效果. 效果 源码 下坠效果: 通过计算桌面的宽度.高度,来设置动画的起始值和结束值. void MainWindow::onDropWindow() { QPropertyAnimation *pAnimation = new QP

Qt动画窗口,Qt之对话框消失动画

在讲解代码之前,先来认识几个概念 QPropertyAnimation:属性动画,可以参考qt 窗口动画 QGraphicsOpacityEffect:窗口透明度设置类,继承自QGraphicsEffect QGraphicsDropShadowEffect:窗口阴影,继承自QGraphicsEffect QGraphicsBlurEffect:滤镜,继承自QGraphicsEffect QGraphicsColorizeEffect:着色,继承自QGraphicsEffect http://w

PopupWindow 动画

1.PopupWindow 简介 首先看android.widget.PopupWindow.java源码注释: /** * <p>A popup window that can be used to display an arbitrary view. The popup * window is a floating container that appears on top of the current * activity.</p> * * @see android.widg

window窗口详解

窗口 在图形化的基于win32的应用程序,窗口是屏幕的矩形区域,应用程序显示输出并接收来自用户的输入,因此,一个图形化基于win32的应用程序的首要任务之一就是创建一个窗口. 窗口与其它窗口共享屏幕,[本事]包括来自其它应用程序的窗口,每次只有一个窗口可以接收来自用户的输入,用户可以使用鼠标.键盘或其它输入设备与此窗口以及拥有该窗口的应用程序进行交互. 关于窗口 这个概述描述了应用程序用来创建和使用窗口的编程单元:管理窗口之间的关系:以及大小.移动.和显示窗口:概述包括以下主题: 桌面窗口  

setAnimationStyle实现的popwindow显示消失的动画效果

摘要 popwindow通过setAnimationStyle(int animationStyle)函数来设置动画效果 android:windowEnterAnimation表示进入窗口动画 android:windowExitAnimation表示窗口退出动画 在res/values/style.xml代码: ?xml version="1.0" encoding="utf-8"? resources style popwindow通过setAnimation

Qt之对话框消失动画

一.效果展示 最近做了一个提示框消失的功能,觉着挺有意思,以前一直以为Qt子窗口不能做淡出效果,其实Qt的淡出功能已经帮我们封装好了,我们仅仅只需要几行代码就可以做出酷炫的窗口关闭效果,写此篇文章的时候,我特意浏览了下之前写的两篇文章(QPainterPath 不规则提示框,QPainterPath 不规则提示框(二)),现在回想起来那会儿确实知之甚少,关于顶层窗口不能做圆角,其实帮助文档里已经说的很明确,解决办法有多种,一种是重写paintEvent函数,另一种是把widget包装一层,本篇文

Android6.0 WMS(六) WMS动画管理

Android的应用启动时,或者切换Activity时都会以动画的方式显示前后两屏的切换过程.动画的原理很简单,把一帧一帧的图像按一定时间间隔显示出来就完成了. 动画的绘制需要定时驱动,通常的做法是启动一个定时消息,每隔一定时间发一个消息,收到消息后输出一帧画面.Android支持VSync信号后,动画的驱动就有VSync信号承担了. 窗口动画的基本元素是窗口Surface中保存的图像,通过对窗口的Surface设置不同的变换矩阵和透明度,然后强制Surface刷新,就能在屏幕上显示出窗口的变化