最近公司的事情不多,自己实现了一个简单的功能,算是一个demo,功能极其简单,而且我们还经常遇到起。
就是在右下角渐变的弹出一个提示框出来,有点类似于QQ或MSN那消息提示功能.(从下往上渐变显示出来)
当然可以进行其他扩展(如对窗体美化,内容控制等),这里只是一个很简单的实现。就没有考虑那么多了。
下面是主要的代码:(主要是调用了系统的API函数实现渐变效果)。其实就是调用了这个函数产生了渐变效果,从下往上显示
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
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;
调用代码就省略了哈。
下面是这个API函数的相关说明(参考网络其他资源)
//添加引用
using System.Runtime.InteropServices;
//声明API
[DllImport("user32")]
private static extern bool AnimateWindow(IntPtr hwnd,int dwTime, int dwFlags);
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;
//窗体加载时的动画效果API
AnimateWindow(this.Handle,1000, AW_VER_NEGATIVE |AW_ACTIVATE);//从下到上且不占其它程序焦点
/*下面是AnimateWindow的具体说明
AnimateWindow API
函数AnimateWindow.
尽管MSDN页面上说这个函数是Win2000的最新函数,但经网友证实在Win98里就已经有这个函数了:
Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
其中:
hwnd只对Form有效,其他像Picture1都无法产生效果。
dwTime是动画持续的时间,默认为200。
dwFlags可取以下值:
AW_HOR_POSITIVE ( &H1 ) '从左到右打开窗口
AW_HOR_NEGATIVE ( &H2 ) '从右到左打开窗口
AW_VER_POSITIVE ( &H4 ) '从上到下打开窗口
AW_VER_NEGATIVE ( &H8 ) '从下到上打开窗口
AW_CENTER ( &H10 ) '看不出任何效果
AW_HIDE (&H10000) '在窗体卸载时若想使用本函数就得加上此常量
AW_ACTIVATE (&H20000) '在窗体通过本函数打开后,默认情况下会失去焦点,除非加上本常量
AW_SLIDE (&H40000) '看不出任何效果
AW_BLEND (&H80000) '淡入淡出效果
最后一个就是我要找的,遗憾的是只对Win2000有效。
另外还有一个要点是:如何让弹出的窗体在右下角:也很简单,供参考:
好了,关键代码都出来了,由于只是一个很小的功能demo,没怎么具体优化。这里只供提供一种思路。有兴趣的朋友可以自己去进行扩展:
源代码下载:MessageShowDemo
资料参考: http://www.cnblogs.com/risen/archive/2008/01/15/1039751.html
Charles Chen
MSN:gotosunny@msn.com