作者: 乔克斯
查看: 80683|回复: 105
打印 上一主题 下一主题

[源码] 【窗体特效案例】C#利用api实现各种窗体特效

  [复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2014-11-18 10:49:16 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
查看: 80683|回复: 105
【窗体特效案例】C#利用api实现各种窗体特效案例
介绍:
这里主要利用API函数Animate Window实现窗体左右,上下,扩展,淡入滑动或滚动动画效果,话不多说上图。

效果图:


API代码:
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

namespace AnimationForm
{
    public class Win32
    {
        /// <summary>
        /// 执行动画
        /// </summary>
        /// <param name="whnd">控件句柄</param>
        /// <param name="dwtime">动画时间</param>
        /// <param name="dwflag">动画组合名称</param>
        /// <returns>bool值,动画是否成功</returns>
        [DllImport("user32.dll")]
        public static extern bool AnimateWindow(IntPtr whnd, int dwtime, int dwflag);

        /// <summary>
        /// 从左到右显示
        /// </summary>
        public const Int32 AW_HOR_POSITIVE = 0x00000001;
        /// <summary>
        /// 从右到左显示
        /// </summary>
        public const Int32 AW_HOR_NEGATIVE = 0x00000002;
        /// <summary>
        /// 从上到下显示
        /// </summary>
        public const Int32 AW_VER_POSITIVE = 0x00000004;
        /// <summary>
        /// 从下到上显示
        /// </summary>
        public const Int32 AW_VER_NEGATIVE = 0x00000008;
        /// <summary>
        /// 若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;否则使窗口向外扩展,即展开窗口
        /// </summary>
        public const Int32 AW_CENTER = 0x00000010;
        /// <summary>
        /// 隐藏窗口,缺省则显示窗口
        /// </summary>
        public const Int32 AW_HIDE = 0x00010000;
        /// <summary>
        /// 激活窗口。在使用了AW_HIDE标志后不能使用这个标志
        /// </summary>
        public const Int32 AW_ACTIVATE = 0x00020000;
        /// <summary>
        /// 使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略
        /// </summary>
        public const Int32 AW_SLIDE = 0x00040000;
        /// <summary>
        /// 透明度从高到低
        /// </summary>
        public const Int32 AW_BLEND = 0x00080000;
    }
}


案例资源下载:
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏20 转播转播
回复 论坛版权

使用道具 举报

沙发
 楼主| 乔克斯 发表于 2014-11-18 15:35:41 | 显示全部楼层
HJL 发表于 2014-11-18 11:58
请问是不是XP系统也支持这些特效?

支持
板凳
 楼主| 乔克斯 发表于 2014-12-15 14:11:48 | 显示全部楼层

是的
地板
 楼主| 乔克斯 发表于 2015-3-23 16:01:08 | 显示全部楼层
shuaikaiyuan 发表于 2015-3-23 15:04
挺好看的  不过你们闪屏的问题是怎么解决的啊

在控件或窗体初始化的时候加这段代码
[C#] 纯文本查看 复制代码
            //设置自定义控件Style
            this.SetStyle(ControlStyles.ResizeRedraw, true);//调整大小时重绘
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);// 双缓冲
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);// 禁止擦除背景
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);// 背景可透明

5#
 楼主| 乔克斯 发表于 2015-3-23 18:32:28 | 显示全部楼层
shuaikaiyuan 发表于 2015-3-23 16:45
我开启了   如果控件过多了话就这样子了(控件背景色已经设置成默认了)。。    一直惆怅怎么解决他好 ...

这串代码是双缓冲,加在控件或窗体初始化的地方。
[C#] 纯文本查看 复制代码
            //设置自定义控件Style
            this.SetStyle(ControlStyles.ResizeRedraw, true);//调整大小时重绘
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);// 双缓冲
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);// 禁止擦除背景

6#
 楼主| 乔克斯 发表于 2015-3-24 13:05:56 | 显示全部楼层
shuaikaiyuan 发表于 2015-3-24 11:45
比如A窗体中加入了Bpanel
Bpanel中加入了Cpanel
Cpanel中加入了控件D UserCon

全都加入是最好的。
7#
 楼主| 乔克斯 发表于 2015-4-18 20:54:40 | 显示全部楼层
gisnewbie 发表于 2015-4-18 19:44
不在loaded事件调用AnimateWindow 窗体控件不显示,怎么解决呢?

在Load或者无参构造函数中写才行。
8#
 楼主| 乔克斯 发表于 2015-4-24 09:34:24 | 显示全部楼层
jjfshebedo 发表于 2015-4-23 16:57
请问是不是XP系统也支持这些特效?

是的
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-5-2 07:40, Processed in 0.628691 second(s), 32 queries , Gzip On.

快速回复 返回顶部 返回列表