企业做商城网站需要什么资质,wordpress怎么接入支付,厦门百度推广优化排名,视频网站建设成本今天继续研究C#的WinForm的显示动画效果。 上次我们实现了无边框窗体的显示动画效果(见博文#xff1a;基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章 )#xff0c;这次介绍的是未在任务栏托盘中窗体的显示隐藏动画效果的实现代码。 1、 项目目录#xff1b… 今天继续研究C#的WinForm的显示动画效果。 上次我们实现了无边框窗体的显示动画效果(见博文基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章 )这次介绍的是未在任务栏托盘中窗体的显示隐藏动画效果的实现代码。 1、 项目目录 下面是项目目录由基本的窗体和操作类组成。 2、 代码介绍 代码比较简单直接将窗体的最小化、最大化效果加入进去即可。 1 namespace Lzhdim.Helper2 {3 using System.Runtime.InteropServices;4 using System;5 using System.Windows.Forms;6 7 8 /// summary9 /// 窗体状态10 /// /summary11 internal enum ShowWindowState12 {13 /// summary14 /// 显示窗体15 /// /summary16 Show,17 /// summary18 /// 隐藏窗体19 /// /summary20 Hide,21 /// summary22 /// 最小化窗体23 /// /summary24 Min,25 /// summary26 /// 最大化窗体27 /// /summary28 Max,29 /// summary30 /// 直接调用窗体的显示31 /// /summary32 DirectShow,33 /// summary34 /// 直接调用窗体的隐藏35 /// /summary36 DirectHide,37 /// summary38 /// 窗体有运行实例时的显示39 /// /summary40 RunningShow41 }42 43 /// summary44 /// 显示隐藏窗体状态操作类45 /// 46 /// 窗体的状态都通过此API进行处理47 /// /summary48 internal static class ShowWindowHelper49 {50 [DllImport(User32.dll)]51 private static extern bool SetForegroundWindow(IntPtr hWnd);52 [DllImport(User32.dll)]53 private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);54 55 //API 常數定義56 57 private const int SW_HIDE 0;58 private const int SW_NORMAL 1;59 private const int SW_MAXIMIZE 3;60 private const int SW_SHOWNOACTIVATE 4;61 private const int SW_SHOW 5;62 private const int SW_MINIMIZE 6;63 private const int SW_RESTORE 9;64 private const int SW_SHOWDEFAULT 10;65 66 /// summary67 /// 设置窗体状态68 /// /summary69 /// param nameform要设置的窗体/param70 /// param namewindowState窗体状态/param71 internal static void ShowWindow(Form form, ShowWindowState windowState)72 {73 switch (windowState)74 {75 case ShowWindowState.Show:76 form.Visible true;77 form.WindowState System.Windows.Forms.FormWindowState.Normal;78 form.ShowInTaskbar true;79 break;80 case ShowWindowState.Hide:81 //这里两个Visible是为了关闭时的动画效果82 form.Visible false;83 form.WindowState System.Windows.Forms.FormWindowState.Minimized;84 form.ShowInTaskbar false;85 form.Visible false;86 break;87 case ShowWindowState.Min:88 form.Visible true;89 form.WindowState System.Windows.Forms.FormWindowState.Minimized;90 break;91 case ShowWindowState.Max:92 form.Visible true;93 form.WindowState System.Windows.Forms.FormWindowState.Maximized;94 break;95 case ShowWindowState.DirectShow:96 form.Show();97 break;98 case ShowWindowState.DirectHide:99 form.Hide();
100 break;
101 case ShowWindowState.RunningShow:
102 //保存窗体现在的状态
103 FormWindowState formWindowState form.WindowState;
104 bool visible form.Visible;
105
106 //下面显示窗体
107 form.Visible true;
108 form.ShowInTaskbar true;
109
110 if (visible)
111 {
112 //如果在状态栏显示状态则直接还原
113 switch (formWindowState)
114 {
115 case FormWindowState.Minimized:
116 //如果是最小化状态则还原原来的状态比如正常或者最大化
117 ShowWindowAsync(form.Handle, SW_RESTORE);
118 break;
119 }
120 }
121 else
122 {
123 //如果是隐藏状态
124 switch(formWindowState)
125 {
126 case FormWindowState.Maximized:
127 //原来是最大化的就最大化显示
128 ShowWindowAsync(form.Handle, SW_MAXIMIZE);
129 break;
130 case FormWindowState.Minimized:
131 case FormWindowState.Normal:
132 //如果是正常或者最小化则正常状态显示
133 ShowWindowAsync(form.Handle, SW_NORMAL);
134 break;
135 }
136 }
137 //最后将窗体置于最前显示
138 SetForegroundWindow(form.Handle);
139
140 break;
141 }
142 }
143 }
144 }3、 运行界面 因为没录制GIF所以不提供界面了。 4、 使用方法 直接将操作类放到项目里面然后调用静态类方法即可。 1 /// summary2 /// 隐藏窗体按钮事件3 /// /summary4 /// param namesender/param5 /// param namee/param6 private void btnHide_Click(object sender, EventArgs e)7 {8 ShowWindowHelper.ShowWindow(this, ShowWindowState.Hide);9 }
10
11 /// summary
12 /// 图标单击事件
13 /// /summary
14 /// param namesender/param
15 /// param namee/param
16 private void NIShowWindow_MouseClick(object sender, MouseEventArgs e)
17 {
18 if(e.Button MouseButtons.Left)
19 {
20 ShowWindowHelper.ShowWindow(this, ShowWindowState.Show);
21 }
22 }
23 /// summary
24 /// 图标双击事件
25 /// /summary
26 /// param namesender/param
27 /// param namee/param
28 private void NIShowWindow_MouseDoubleClick(object sender, MouseEventArgs e)
29 {
30 if (e.Button MouseButtons.Left)
31 {
32 //这里调用Hide程序会退出所以直接调默认的Hide函数
33 ShowWindowHelper.ShowWindow(this, ShowWindowState.DirectHide);
34 }
35 }5、 源码下载 这里提供源码例子下载 https://download.csdn.net/download/lzhdim/88171194 上面是笔者整理的关于C#的窗体隐藏到托盘图标中的动画效果搭配上次的无边框窗体的效果更好的能够对窗体的效果进行显示。提供了源码下载及例子能够直接进行代码复用即可希望对同样问题的读者能够解决该问题。