当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现。看吧,正写着呢弹出了一个。
一、主要用到的函数是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
好了,试试效果吧!祝好 章鱼哥