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

好了,试试效果吧!祝好    章鱼哥

时间: 2024-10-05 04:58:55

VB.NET 章鱼哥出品--利用API函数AnimateWindow创建Popup提示窗口的相关文章

Delphi使用Windows API函数AnimateWindow实现窗体特效

{**********************************************************************API函数 AnimateWindow 使用:函数功能:窗体显示和隐藏时产生特殊的动画效果:可以产生两种类型的动画效果:          滚动动画 和 滑动动画函数原型:BOOL AnimateWindow(HWND hWnd, DWORD dwTime, DWORD dwFlags)参数说明:hWnd 指定产生动画效果的窗体的句柄:          

利用lambda函数自动创建EBS快照和删除快照

利用lambda函数自动创建EBS快照和删除快照 此文章参考了AWS中国区关于构建自动化EBS快照周期的官方文档,参考链接"https://amazonaws-china.com/cn/blogs/china/construct-ebs-life-circle-management/" 本文与之不同的是,本文没有使用dynamoDB服务,仅通过lambda完成了EBS的快照备份.当然,自动快照一定要搭配自动删除功能使用,否则快照容量越来越大,无形中增加了企业的IT成本. 使用阿里云和腾

VB.NET章鱼哥出品—怎样解决MDI子窗口被父窗口中的控件覆盖的问题

近期有个网友问我这个问题,我就上网搜了下,结果非常失望.有几个在CSDN上发的求助帖.看到最后都没有找到明白的答案. 这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了改动,并给出了简单实例代码. 读者可自行測试: Public Class Form1 '作者:章鱼哥,QQ:3107073263 群:309816713 '如有疑问或好的建议请联系我.大家一起进步 '声明SetParent函数.这是一个API函数 Declare Function SetParent Lib

VB.NET章鱼哥出品—如何解决MDI子窗体被父窗体中的控件覆盖的问题

最近有个网友问我这个问题,我就上网搜了下,结果很失望,有几个在CSDN上发的求助帖,看到最后都没有找到明确的答案.这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了修改,并给出了简单实例代码.读者可自行测试: Public Class Form1 '作者:章鱼哥,QQ:3107073263 群:309816713 '如有疑问或好的建议请联系我,大家一起进步 '声明SetParent函数,这是一个API函数 Declare Function SetParent Lib "u

VB.NET 章鱼哥出品--入门基础Button控件的使用详解(一)

全网最全的Button控件详解!!!Button 按钮是VB.NET 中最基础,也是最常用的控件,不管你是初学者还是大牛.每个程序中必然少不了Button按钮.但是Button控件有很多用法很多大牛却不见得知道.用的最多的无非就是在点击事件中处理程序,今天我将使用2到3篇文章的篇幅来详细讲解Button按钮的用法.      '作者:章鱼哥,QQ:3107073263 群:309816713            '如有疑问或好的建议请联系我,大家一起进步     1,属性(以最常用的开始) (

VB调用API函数

API函数快速入门--怎样在VB中声明和使用API函数-- 一.在VB中声明API函数有两种方法:如果我们只在某个窗体中使用API函数,我们可以在窗体代码的 General部分声明它: 声明的语法是: Private Declare Function ... Private Declare Sub..... 这里必须采用Private声明,因为这个API函数只能被一个窗体内的程序所调用. 如果我们的程序有多个窗体构成,而且我们需要在多个窗体中使用同一个API函数,就需要在模块中 声明了. 先添加

C# 窗体常用API函数 应用程序窗体查找

常用的处理窗体的API函数如下(注意:API函数必须放在窗体中...): 使用C#语言,要引用DllImport,必须要添加using System.Runtime.InteropServices命名空间 (1)获得当前前台窗体句柄 [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern IntPtr GetForegroundWindow(); 返回值类型

FreeRTOS系列第20篇---FreeRTOS信号量API函数

FreeRTOS的信号量包括二进制信号量.计数信号量.互斥信号量(以后简称互斥量)和递归互斥信号量(以后简称递归互斥量).我们可以把互斥量和递归互斥量看成特殊的信号量. 信号量API函数实际上都是宏,它使用现有的队列机制.这些宏定义在semphr.h文件中.如果使用信号量或者互斥量,需要包含semphr.h头文件. 二进制信号量.计数信号量和互斥量信号量的创建API函数是独立的,但是获取和释放API函数都是相同的:递归互斥信号量的创建.获取和释放API函数都是独立的. 1创建二进制信号量 1.1

Vb.net/VB 声明API函数实现父窗体功能

回顾第一次敲机房收费,自己调用了api函数实现了父窗体及其子窗体最小化的功能,如今再次遇到,自己就在思考,能不能继续使用API函数呢?答案当然是Of Course! 其实仔细看两者并没有多大的区别,先看看在vb.net中如何调用: 首先添加一个类模块,来封装此API函数: <span style="font-size:14px;"> Public Declare Function SetParent Lib "<span style="color: