技术标签: winform c# .net Winform窗体应用开发系列
第一种方法,在屏幕下方缓缓出来,又缓缓关闭,这类效果自然使用原生态的API最合适不过了
核心代码:
/// <summary>
/// 窗体动画函数
/// </summary>
/// <param name="hwnd">指定产生动画的窗口的句柄</param>
/// <param name="dwTime">指定动画持续的时间</param>
/// <param name="dwFlags">指定动画类型,可以是一个或多个标志的组合。</param>
/// <returns></returns>
[DllImport("user32")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
//下面是可用的常量,根据不同的动画效果声明自己需要的
private const int AW_HOR_POSITIVE = 0x0001;//自左向右显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
private const int AW_HOR_NEGATIVE = 0x0002;//自右向左显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
private const int AW_VER_POSITIVE = 0x0004;//自顶向下显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
private const int AW_VER_NEGATIVE = 0x0008;//自下向上显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志该标志
private const int AW_CENTER = 0x0010;//若使用了AW_HIDE标志,则使窗口向内重叠;否则向外扩展
private const int AW_HIDE = 0x10000;//隐藏窗口
private const int AW_ACTIVE = 0x20000;//激活窗口,在使用了AW_HIDE标志后不要使用这个标志
private const int AW_SLIDE = 0x40000;//使用滑动类型动画效果,默认为滚动动画类型,当使用AW_CENTER标志时,这个标志就被忽略
private const int AW_BLEND = 0x80000;//使用淡入淡出效果
调用代码(将窗体的FormBorderStyle属性设置为none):
/// <summary>
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
//从屏幕右下角出来
int x = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
//从屏幕下方任务栏开始上升到屏幕中央
//int x = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
//int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
//从屏幕下方开始上升到屏幕中上方
//int x = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
// int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Width;
this.Location = new Point(x, y);//设置窗体在屏幕右下角显示
AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_ACTIVE | AW_VER_NEGATIVE);
}
/// <summary>
/// 窗体关闭事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE);
}
第二种方法,主窗体居中并且主窗体淡入淡出的特效
using System.Runtime.InteropServices;
public class Win32
{
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; //若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
public const Int32 AW_HIDE = 0x00010000; //隐藏窗口,缺省则显示窗口。
public const Int32 AW_ACTIVATE = 0x00020000; //激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
public const Int32 AW_SLIDE = 0x00040000; //使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
public const Int32 AW_BLEND = 0x00080000; //使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool AnimateWindow(
IntPtr hwnd, // handle to window
int dwTime, // duration of animation
int dwFlags // animation type
);
}
/// <summary>
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/**//*淡入窗体*/
private void Form_Load(object sender, EventArgs e)
{
Win32.AnimateWindow(this.Handle, 2000, Win32.AW_BLEND);
}
/// <summary>
/// 窗体关闭事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/**//*淡出窗体*/
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
Win32.AnimateWindow(this.Handle, 2000, Win32.AW_SLIDE | Win32.AW_HIDE | Win32.AW_BLEND);
}
出自:https://www.cnblogs.com/mq0036/p/6421946.html
第三种方法:启用主窗体,特效动画从中心点向四周展开显示窗体,关闭窗体特效动画从四周收缩回中心点关闭窗体
核心代码
//定义变量
bool flag = false;
//在窗体构造函数里面给变更赋初始值
public Form3()
{
InitializeComponent();
flag = true;
}
#region user32.dll
//导入user32.dll
[System.Runtime.InteropServices.DllImport("user32")]
//声明API函数
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
#endregion
#region 常量
//正面_水平方向
const int AW_HOR_POSITIVE = 0x0001;
//负面_水平方向
const int AW_HOR_NEGATIVE = 0x0002;
//正面_垂直方向
const int AW_VER_POSITIVE = 0x0004;
//负面_垂直方向
const int AW_VER_NEGATIVE = 0x0008;
//由中间四周展开或
const int AW_CENTER = 0x0010;
//隐藏对象
const int AW_HIDE = 0x10000;
//显示对象
const int AW_ACTIVATE = 0x20000;
//拉幕滑动效果
const int AW_SLIDE = 0x40000;
//淡入淡出渐变效果
const int AW_BLEND = 0x80000;
#endregion
#region 判断方向
public int IsHorOrVer(int pos)
{
int rtn = 0;
//判断是正方向还是反方向
if (pos.Equals(0))
{
//判断是横向还是纵向
if (flag)
rtn = AW_HOR_POSITIVE;
else rtn = AW_VER_POSITIVE;
}
else if (pos.Equals(1))
{
//判断是横向还是纵向
if (flag)
rtn = AW_HOR_NEGATIVE;
else rtn = AW_VER_NEGATIVE;
}
return rtn;
}
#endregion
/// <summary>
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/**//*淡入窗体*/
private void Form_Load(object sender, EventArgs e)
{
//动画——窗体由中心向四周扩展
AnimateWindow(this.Handle, 1000, AW_CENTER | AW_ACTIVATE | IsHorOrVer(0));
}
/// <summary>
/// 窗体关闭事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/**//*淡出窗体*/
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
//动画——窗体由四周向中心缩小直至消失
AnimateWindow(this.Handle, 1000, AW_CENTER | AW_HIDE | IsHorOrVer(1));
}
特效代码,根据个人爱好使用,替换掉加载和关闭事件里面的即可:
//动画——窗体向上拖拉
AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_HIDE | IsHorOrVer(1));
//动画——窗体向下拖拉
AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_ACTIVATE | IsHorOrVer(0));
//动画——窗体淡出特效
AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE | IsHorOrVer(1));
//动画——窗体淡入特效
AnimateWindow(this.Handle, 1000, AW_BLEND | AW_ACTIVATE | IsHorOrVer(0));
//动画——窗体由四周向中心缩小直至消失
AnimateWindow(this.Handle, 1000, AW_CENTER | AW_HIDE | IsHorOrVer(1));
//动画——窗体由中心向四周扩展
AnimateWindow(this.Handle, 1000, AW_CENTER | AW_ACTIVATE | IsHorOrVer(0));
文章浏览阅读1.9k次。公司提议组织一次登山活动,这是本年度继登瑜家山以来的第二次登山活动。作为登山队长的我接手了这次活动的组织任务。吸取上次登山活动的经验,我着重画出了本次活动的具体行进路线。这次活动的目的是游赏、锻炼与人文熏陶,总体来说都基本达到了。虽然具体的行进过程中遇到一些计划外的状况,因为有备案所以都一一化解,并成为这一次以锻炼为主的登山活动的小插曲。下面重点谈谈这些小插曲。是笔直穿越武大还是爬珞珈主山
文章浏览阅读1.5k次。全链路日志追踪过程:nginx---> 网关--->服务A----服务.......1、nginx相关配置(1) nginx.conf# HTTPS serverserver {listen 443 ssl http2;server_name mp-sit.smartmidea.net;ssl_protocols TLSv1.1 TLSv1.2;ssl_certific..._log4j2 traceid spanid
文章浏览阅读200次。目录1.jupyter notebook2.jupyter lab1.jupyter notebookconda install jupyter notebookconda install nb_conda创建虚拟环境并进入,然后i继续:pip install ipykernel #预安装 ipykernel 包# 将tensorflow环境作为 kernel 初始化,并命名为. 这个环境添加到了ipython的kernel中python -m ipykernel.
文章浏览阅读528次。from selenium import webdriverdriver.current_window_handle #获取当前窗口句柄driver.window_handles # 用于获取所有窗口句柄--------------------------------------------------------------------------------...
文章浏览阅读597次。1 简介图像配准是图像处理技术的基础,是图像镶嵌,图像融合,目标追踪的重要前提.现在的图像规模越来越大,图像信息越来越复杂,自动配准成了配准的首要方法和重要研究方向.基于图像灰度配准的互信息配准算法,不需要对图像进行特征提取等预处理操作,人工干预较少,自动化程度较高,其配准精度也高于其他基于对图像进行分割的方法,并且该算法适用于多模态图像,鲁棒性好.2 部分代码close allclear allticx0=[50; 50; -15; 0.5]; % Initial points, [_matlabgan网络图像配准开源项目
文章浏览阅读283次。Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。由于 Promise 是 ES6 新增加的,所以一些旧的浏览器并不支持,苹果的 Safari 10 和 Windows 的 Edge 14 版本以上浏览器才开始支持 ES6 特性。构造 Promise现在我们新建一个 Promise 对象:new Promise(function (resolve, reject) { // 要做的事情...});通过新建一个 Promise 对象好像并没有_promise个人
文章浏览阅读2.9k次。PCL库中的3D点云包含的域相当丰富,但大多数时候我们用不到,在一些插件和脚本中使用PCL导出的PLY文件,这些多余的域可能会导致报错,因此我写了一个简单的PLY binary little-endian format格式,包含了XYZ的三维坐标信息和每个点的RGB信息。运行需要PCL库读取点云文件。#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h>_rgb little endian
文章浏览阅读4.6k次,点赞2次,收藏4次。1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免。所以今天就给大家分享一个自定义的做日期表的方法,当然自己使用Excel用公式做一个也很快,八仙过海各显神通。我对C#比较了解,就用自己最了解的方式做了一个。大家可以自己扩充,或者可以把需求提供我,我统一完善。比如下面这个表(来自一个..._powerbi日期表的作用
文章浏览阅读3k次。SNAT 策略及应用• SNAT(Source Network Address Translation,源地址转换)是Linux防火墙的一种地址转换操作,也是iptables命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的源IP地址SNAT 策略概述随着internet网络的快速发展,IPv4可支持的可用IP地址资源逐渐匮乏,大部分企业面临着局域网内的主机接入internet的需求,从而通过SNAT策略来解决局域网共享上网的问题,可得以缓解。而解决IPv4地址匮乏的是 (IPv6)工作原_snat
文章浏览阅读551次。0 前言最近一个项目需要搭建集群,用到负载均衡服务器,因此尝试一下Nginx,一些安装、配置与踩坑实录如下。1 环境配置1.1 我的环境配置ubuntu18.04无jdk、无jre、无tomcat、无nginx1.2 安装jre因为tomcat是基于jre环境的,因此需要安装jre这个java运行环境。网上部分材料说要安装jdk,在这里其实是不需要jdk的。(jdk是java开发套件,像我这种不进行java开发,只需要一个java程序运行环境的,只需要配置jre就可以了)因为想到以后对j
文章浏览阅读1.5k次。目录文章目录目录L2 vSwitchL2 SwitchingL2 vSwitchVPP 可以作为一个现成的 L2 vSwitch,支持创建:Bridge DomainsPorts (including tunnel ports)Connect ports to bridge domainsProgram ARP terminationetc…L2 Switching使用 VPP1 充当 L2 vSwitch 的角色。在 Linux 上创建 veth pair vpp1out-v_vpp支持l2转发
文章浏览阅读1.1k次。1)下载对应版本注册账户后选定报错提示的那个版本5.0即可,我下载的是cudnn-8.0-linux-x64-v5.1.tgz2)安装Fz上传至Linux服务器指定文件夹,执行tar xvzf cudnn-8.0-linux-x64-v5.1.tgz,ls后可见cuda文件夹3)设定软链接没有在cuda目录的上层目录执行以下语句,就会报找不到对应file。正确执行路径可参考以下截图su...