VB.NET 章鱼哥出品--利用API函数AnimateWindow创建Popup提示窗口,窗体的动画效果

当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现。看吧,正写着呢弹出了一个。


一、主要用到的函数是API函数AnimateWindow。下面来简单的介绍一下这个函数的使用。
1 函数声明

  '声明API函数AnimateWindow。该函数可以动态的操作窗体
    Declare Function AnimateWindow Lib "user32" Alias "AnimateWindow" (ByVal hwnd As IntPtr, ByVal dwTime As Int32, ByVal dwFlags As Int32) As Boolean
2,参数设置

hWnd:指定产生动画的窗口的句柄。
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。
dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。标志描述:
AW_SLIDE:使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
AW_BLEND:使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
AW_HIDE:隐藏窗口,缺省则显示窗口。
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_HOR_NEGATIVE:自右向左显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略
3,返回值
如果函数成功,返回值为非零;如果函数失败,返回值为零。在下列情况下函数将失败

二、窗体设计:
窗体很简单,一个Form窗口,一个PictureBox控件,一个Button按钮,一个Timer控件


实现功能:每隔三秒钟,提示窗口在桌面的右下角显示隐藏交替。可有多种显示方式,和隐藏方式。在代码中都有体现,读者可自行测试。
三、代码实现
在Moudul模块中先定义一些全局变量

Module Module1
    '从左到右显示
    Public Const AW_HOR_POSITIVE As Int32 = &H1
    '从右到左显示
    Public Const AW_HOR_NEGATIVE As Int32 = &H2
    '从上到下显示
    Public Const AW_VER_POSITIVE As Int32 = &H4
    '从下到上显示
    Public Const AW_VER_NEGATIVE As Int32 = &H8
    '若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;否则使窗口向外扩展,即展开窗口
    Public Const AW_CENTER As Int32 = &H10
    Public Const AW_HIDE As Int32 = &H10000 '隐藏窗口,缺省则显示窗口
    '激活窗口。在使用了AW_HIDE标志后不能使用这个标志
    Public Const AW_ACTIVATE As Int32 = &H20000
    '使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略
    Public Const AW_SLIDE As Int32 = &H40000
    '透明度从高到低
    Public Const AW_BLEND As Int32 = &H80000
    '判断窗体是否隐藏
    Public Ishide As Boolean
End Module

在提示窗体的类中实现的代码:
'***************************************************************************   
'作者:章鱼哥,QQ:3107073263 群:309816713   
'如有想要源码或好的建议请联系我,大家一起进步
'群里正在建设,欢迎参加讨论
'****************************************************
Public Class Form_Main
    ' 显示在屏幕的右下角
    Dim Rect As Rectangle = Screen.PrimaryScreen.WorkingArea '获取电脑桌面屏幕
    Dim X As Integer '提示窗口的Left值
    Dim Y As Integer '提示窗口的Top值
    '声明API函数AnimateWindow。该函数可以动态的操作窗体
    Declare Function AnimateWindow Lib "user32" Alias "AnimateWindow" (ByVal hwnd As IntPtr, ByVal dwTime As Int32, ByVal dwFlags As Int32) As Boolean
    '  窗体初始化
    Private Sub Form_Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        X = Rect.Width - Me.Width
        Y = Rect.Height - Me.Height
        Me.SetBounds(X, Y, Me.Width, Me.Height) '定义窗体位置
        Timer1.Enabled = True '开启Timer控件
        '将窗体设置成无边框格式。这样是有道理的,不信你吧这段代码注释掉试试
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    End Sub
    '显示
    Private Sub ShowForm()
        '三种方式都可以用,想用哪种就注释另外两种
        'AnimateWindow(Me.Handle, 2000, AW_VER_NEGATIVE Or AW_HOR_NEGATIVE) '右上飞出
        AnimateWindow(Me.Handle, 2000, AW_CENTER) '中间扩散
        'AnimateWindow(Me.Handle, 2000, AW_BLEND)’由浅变深
        Ishide = False
    End Sub
    '隐藏
    Private Sub HideForm()
        'AnimateWindow(Me.Handle, 2000, AW_HIDE Or AW_VER_POSITIVE)'由上向下飞出
        'AnimateWindow(Me.Handle, 2000, AW_HIDE Or AW_VER_POSITIVE Or AW_HOR_POSITIVE) '由左上角向右下飞出
        AnimateWindow(Me.Handle, 2000, AW_HIDE Or AW_BLEND) '窗体慢慢透明淡出
        Ishide = True
    End Sub
    '定时器,隔3秒交替显示或隐藏
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Ishide Then
            ShowForm()
        Else
            HideForm()
        End If
    End Sub
End Class
好了,试试效果吧!祝好    章鱼哥



发布了25 篇原创文章 · 获赞 25 · 访问量 17万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览