CharlesChen's Technical Space

简单实用是我一直在软件开发追求的目标(I Focus on. Net technology, to make the greatest efforts to enjoy the best of life.)
Not the best, only better
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

C#简单实现渐显弹出消息在"右下角"显示(Demo)

Posted on 2009-04-10 22:06  Charles Chen  阅读(6122)  评论(3编辑  收藏  举报

    最近公司的事情不多,自己实现了一个简单的功能,算是一个demo,功能极其简单,而且我们还经常遇到起。

就是在右下角渐变的弹出一个提示框出来,有点类似于QQ或MSN那消息提示功能.(从下往上渐变显示出来)

当然可以进行其他扩展(如对窗体美化,内容控制等),这里只是一个很简单的实现。就没有考虑那么多了。

下面是主要的代码:(主要是调用了系统的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函数的相关说明(参考网络其他资源)

//添加引用 
  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有效。

 

另外还有一个要点是:如何让弹出的窗体在右下角:也很简单,供参考:

Code

 

好了,关键代码都出来了,由于只是一个很小的功能demo,没怎么具体优化。这里只供提供一种思路。有兴趣的朋友可以自己去进行扩展:

源代码下载:MessageShowDemo

 

资料参考:  http://www.cnblogs.com/risen/archive/2008/01/15/1039751.html

 

Charles Chen

MSN:gotosunny@msn.com