C#使用AnimateWindow()实现动画窗体的方法:创建特殊窗体

目录

一.涉及到的知识点

(1) AnimateWindow函数

(2)操作流程

1.首先,定义一个用于封装AnimateWindow函数的类

2.在窗体类中使用这个方法

3.生成效果

二、实例

(1)Resources.Designer.cs

(2)Form1.Designer.cs

(3)Form1.cs

(4)生成的动画效果


一.涉及到的知识点

(1) AnimateWindow函数

        用API函数AnimateWindow函数来实现窗体的动画效果。在C#中,你可以使用P/Invoke技术调用Windows API中的AnimateWindow函数来实现动画窗体。语法格式如下:

[DllImportAttribute("user32.dll")]
private static extern bool Animate Window(IntPtr hwnd,int dwTime,int dwFlags);参数说明
hwnd:IntPtr,窗口句柄。
dwTime:动画的持续时间,数值越大动画效果的时间就越长。
dwFlags:动画效果类型选项,其常量值及说明如表:

    

   

AW_SLIDE

0x0004000

使用滑动类型。默认则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略

AW_ACTIVATE

0x00020000

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

AW_BLEND

0x00080000

使用淡入效果。只有当hWnd为顶层窗口时才可以使用此标志

AW_HIDE

0x00010000

隐藏窗口,默认则显示窗口

AW_CENTER

0x00000010

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

AW_HOR_POSITIVE

0x00000001

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

AW_HOR_NEGATIVE

0x00000002

自右向左显示窗口。当使用AW_CENTER标志时该标志被忽略

AW_VER_POSITIVE

0x00000004

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

AW_VER_NEGATIVE

0x00000008

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

(2)操作流程

1.首先,定义一个用于封装AnimateWindow函数的类

 public static partial class Animations{[LibraryImport("user32.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]public static partial bool AnimateWindow(IntPtr hWnd, int dwTime, int dwFlags);}

2.在窗体类中使用这个方法

 private void Form1_Load(object sender, EventArgs e){Animations.AnimateWindow(Handle, 500, (int)AnimationFlags.AW_HOR_POSITIVE | (int)AnimationFlags.AW_VER_POSITIVE);}[Flags]public enum AnimationFlags{AW_HOR_POSITIVE = 0x0001,AW_HOR_NEGATIVE = 0x0002,AW_VER_POSITIVE = 0x0004,AW_VER_NEGATIVE = 0x0008,AW_CENTER = 0x0010}

3.生成效果

        在这个例子中,AW_HOR_POSITIVE 和 AW_VER_POSITIVE 标志表示窗口将从左上角向右下角展开。

二、实例

        本实例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢地以拉伸的效果显示到用户的面前;窗体关闭时,也是一样慢慢地消失。

(1)Resources.Designer.cs

//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.42000
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------namespace _189.Properties {using System;/// <summary>///   一个强类型的资源类,用于查找本地化的字符串等。/// </summary>// 此类是由 StronglyTypedResourceBuilder// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen// (以 /str 作为命令选项),或重新生成 VS 项目。[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")][global::System.Diagnostics.DebuggerNonUserCodeAttribute()][global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]internal class Resources {private static global::System.Resources.ResourceManager resourceMan;private static global::System.Globalization.CultureInfo resourceCulture;[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]internal Resources() {}/// <summary>///   返回此类使用的缓存的 ResourceManager 实例。/// </summary>[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]internal static global::System.Resources.ResourceManager ResourceManager {get {if (object.ReferenceEquals(resourceMan, null)) {global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("_189.Properties.Resources", typeof(Resources).Assembly);resourceMan = temp;}return resourceMan;}}/// <summary>///   重写当前线程的 CurrentUICulture 属性,对///   使用此强类型资源类的所有资源查找执行重写。/// </summary>[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]internal static global::System.Globalization.CultureInfo Culture {get {return resourceCulture;}set {resourceCulture = value;}}/// <summary>///   查找 System.Drawing.Bitmap 类型的本地化资源。/// </summary>internal static System.Drawing.Bitmap _03 {get {object obj = ResourceManager.GetObject("_03", resourceCulture);return ((System.Drawing.Bitmap)(obj));}}}
}

(2)Form1.Designer.cs

namespace _189
{partial class Form1{/// <summary>///  Required designer variable./// </summary>private System.ComponentModel.IContainer components = null;/// <summary>///  Clean up any resources being used./// </summary>/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows Form Designer generated code/// <summary>///  Required method for Designer support - do not modify///  the contents of this method with the code editor./// </summary>private void InitializeComponent(){SuspendLayout();// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;BackgroundImage = Properties.Resources._03;BackgroundImageLayout = ImageLayout.Stretch;ClientSize = new Size(354, 261);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "动画窗体";FormClosed += Form1_FormClosed;Load += Form1_Load;ResumeLayout(false);}#endregion}
}

(3)Form1.cs

// 动画窗体
using System.Runtime.InteropServices;namespace _189
{public partial class Form1 : Form{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 Form1(){InitializeComponent();}/// <summary>/// 开始窗体动画/// </summary>private void Form1_Load(object sender, EventArgs e){AnimateWindow(Handle, 3000, AW_SLIDE + AW_VER_NEGATIVE);}//重写API函数,用来执行窗体动画显示操作[LibraryImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]private static partial bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);/// <summary>/// 结束窗体动画/// </summary>private void Form1_FormClosed(object sender, FormClosedEventArgs e){AnimateWindow(Handle, 3000, AW_SLIDE + AW_VER_NEGATIVE + AW_HIDE);}}
}

(4)生成的动画效果

         打开和关闭窗体都会产生动画效果,可惜动画无法截图,网友自己体验去吧。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/635900.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++|stack-queue-priority_queue(适配器+模拟实现+仿函数)

目录 一、容器适配器 1.1容器适配器概念的介绍 1.2stack和queue的底层结构 1.3deque容器的介绍 1.3.1deque的缺陷及为何选择他作为stack和queue的底层默认实现 二、stack的介绍和使用 2.1stack的介绍 2.2stack的使用 2.3stack的模拟实现 三、queue的介绍和使用 …

LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略

LLMs之Llama3&#xff1a;Llama 3的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年4月18日&#xff0c;Meta 重磅推出了Meta Llama 3&#xff0c;本文章主要介绍了Meta推出的新的开源大语言模型Meta Llama 3。模型架构 Llama 3 是一种自回归语言模型&#x…

蓝桥杯第十五界软件测试线下省赛题目分析及解决

PS 需要第十五界蓝桥杯被测系统或者功能测试模板、单元测试被测代码、自动化测试被测代码请加&#x1f427;:1940787338 备注&#xff1a;15界蓝桥杯省赛软件测试 题目1&#xff1a;功能测试 题目描述 ​ 某物流公司的货运收费标准根据重量、距离和节假日三个因素来确定。如…

2024蓝桥杯嵌入式模板代码详解

文章目录 一、STM32CubeMx配置二、LED模板代码三、LCD模板代码 一、STM32CubeMx配置 打开STM32CubeMx&#xff0c;选择【File】->【New Project】&#xff0c;进入芯片选择界面&#xff0c;搜索到蓝桥杯官方的芯片型号&#xff0c;并点击收藏&#xff0c;下次直接点击收藏就…

LeetCode 113—— 路径总和 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 看到树的问题一般我们先考虑一下是否能用递归来做。 假设 root 节点的值为 value&#xff0c;如果根节点的左子树有一个路径总和等于 targetSum - value&#xff0c;那么只需要将根节点的值插入到这个路径列表中…

Unity之圆环slider

一、参考文章 Unity_圆环滑动条&#xff08;圆形、弧形滑动条&#xff09;_unity弧形滑动条-CSDN博客 此滑动条拖动超过360后继续往前滑动值会从0开始&#xff0c;正常我们超过360度时不可在滑动。 二、 超过360度不可滑动问题解决 参考HTML文章制作&#xff1a; https://www.c…

嵌入式Linux开发

(17 封私信 / 1 条消息) 嵌入式Linux应用 - 搜索结果 - 知乎 (zhihu.com)

css层叠性,继承性,优先级

前言 本文概要&#xff1a;讲述css的三大特性&#xff0c;层叠&#xff0c;继承和优先级。 层叠性 描述&#xff1a;我们试想以下这种情况&#xff1a;我们定义了同一个选择器&#xff0c;但是定义的属性不同。属性有相同的也有不同的&#xff0c;那么最后我们这个页面会听谁的…

小图标还不会设计!

ICON图标设计 hello&#xff0c;我是小索奇 image-20230805225451447 你有好奇过这样的图标如何设计的吗&#xff1f; 其实非常简单&#xff0c;仅需要一行代码即可完成&#xff0c;本篇文章就带伙伴们使用&#xff0c;每天看一篇&#xff0c;简单易懂&#xff0c;日久技长~…

设计模式学习笔记 - 开源实战三(中):剖析Google Guava中用到的设计模式

概述 上篇文章&#xff0c;我通过 Google Guava 这样一个优秀的开源类库&#xff0c;讲解了如何在业务开发中&#xff0c;发现跟业务无关、可以复用的通用功能模块&#xff0c;并将它们抽离出来&#xff0c;设计成独立的类库、框架或功能组件。 本章再来学习下&#xff0c;Go…

稀碎从零算法笔记Day54-LeetCode:39. 组合总和

题型&#xff1a;数组、树、DFS、回溯 链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数…

卷王问卷考试系统/SurveyKing调查系统源码

SurveyKing是一个功能强大的开源调查问卷和考试系统&#xff0c;它能够快速部署并适用于各个行业。 这个系统提供了在线表单设计、数据收集、统计和分析等功能&#xff0c;支持20多种题型&#xff0c;提供多种创建问卷的方式和设置。 项 目 地 址 &#xff1a; runruncode.c…