1.JavaScript精彩网页特效实例精粹目录
2.c++编写了一个播放器 用的浮动浮动picture控件,想双击它全屏显示,按钮按钮再双击回到原来的源码源码状态,
3.Lazarus安装和IDE
4.VB系统托盘问题
5.PyQt5系列教程(52):QDockWidget的设置使用
JavaScript精彩网页特效实例精粹目录
本文详细介绍了JavaScript在网页特效设计中的多种实例与应用,旨在为开发者提供丰富的浮动浮动灵感与实践案例。以下为各章节内容概述: 第一章:文本特效类实例1:随机产生文字
实例2:文字循环出现
实例3:鼠标光标划过选中文本
实例4:颜色不停变化的按钮按钮小年糕源码链接
实例5:逐字出现的信息条
实例6:文字波浪效果
实例7:文字逐个闪烁效果
实例8:文字发光效果
实例9:文字连续闪烁
实例:旋转文字
实例:文字破碎效果
实例:状态栏文字效果
实例:文字同步显示效果
实例:特殊公告栏效果
实例:文字输入计算
实例:网页代码测试器
实例:简易文本编辑器
第二章:特效类实例:禁止下载
实例:链接翻转效果
实例:有光源扫描效果
实例:渐出效果
实例:滚动显示
实例:下拉菜单选择
实例:定期显示
实例:提示文字效果
实例:自由运动
实例:随意拖动效果
实例:浮动效果
实例:限制上传属性
实例:自动缩放效果
实例:滚动链接效果
第三章:鼠标键盘类实例:禁止鼠标右键
实例:鼠标光标悬停加入收藏夹
实例:鼠标光标悬停设为首页
实例:鼠标光标指针跟踪效果
实例:鼠标光标三色光跟随效果
实例:鼠标光标环绕效果
实例:鼠标光标跟随效果
实例:显示鼠标光标坐标
实例:禁止文字拷贝
实例:屏蔽键盘按键
实例:虚拟键盘功能
第四章:按钮特效类实例:关不掉的弹出框
实例:查看源代码按钮
实例:链接按钮
实例:打印预览按钮
实例:打印按钮
实例:只能单击一次的按钮
实例:关闭窗口按钮
实例:前进后退按钮
实例:全屏显示按钮
实例:按钮滚动文字效果
实例:页面内容转成WORD文档按钮
实例:声音播放控制按钮
实例:弹出窗口按钮
实例:弹出模态窗口按钮
实例:窗口抖动按钮
本文涵盖了JavaScript在网页特效设计中的广泛应用场景,从文字、源码源码、设置鼠标键盘交互到按钮、浮动浮动日期时间、按钮按钮计数转换等多个方面,源码源码为开发者提供了丰富的设置案例与实践灵感。通过学习这些实例,浮动浮动开发者可以提升网页的按钮按钮互动性和用户体验,创造出更多吸引人、源码源码功能丰富的网页应用。扩展资料
本书是一本介绍运用JavaScript语言进行动态网页特效编程的实例大全。书中多个实例以效果展示-程序实现-难点分析-知识拓展等层层推进的写法,使讲解更精彩、理解更深入、应用更容易。通过本书的学习,读者也可以制作出更多更酷的特效网页,从而展现出自己的网站特色。c++编写了一个播放器 用的picture控件,想双击它全屏显示,再双击回到原来的状态,
可以参考下面的技术
摘要:本文对在VC下单文档程序的全屏显示及其恢复的实现过程作了介绍。
关键字:窗体、全屏显示、Visual C++
一、 引言
在编辑类软件或程序代码编辑程序中经常要遇到一些长度特别大的视频软件充值源码文本或代码,尤其是对于程序源码的编辑,如果编辑界面太小,则需要频繁拉动滚动条,对于程序员而言是很不情愿的,因为这样会打断程序的设计思路、影响编程的效果。因此不少软件都具备了全屏放大的功能,将编辑界面放大到全屏幕,尽最大限度地减少对滚动条的依赖程度。相信不少程序员一定非常喜欢在VC的全屏编辑状态下编程,本文就以Visual C++ 6.0为开发环境将普通的单文档编辑视图程序扩展为全屏编辑功能。
二、 程序的设计思路
普通常规程序之所以在最大化的情况下没能实现全屏,是由于状态条、工具条、系统菜单、标题栏等几个窗口分别占据了一部分屏幕空间,所以实现视图的全屏显示首先要把以上几个窗体隐藏起来,然后才可以考虑将视图最大化的问题。
隐藏状态栏、工具条,可以将其当作一个浮动的窗体,只需通过各自的句柄将ShowWindow()函数的参数设成SW_HIDE即可将这几个窗体隐藏,同视图非常类似,在需要显示的时候可以用SW_SHOW标志将其显示出来。在此需要说明的是在进行全屏操作之前需要将当前的视图设置保存好,这在从全屏恢复为原始状态时需要用到。该操作也比较简单,只需简单调用API函数GetWindowRect()即可。至于标题栏的隐藏就不是简单的隐藏窗口了,这涉及到窗体风格的正负7的源码修改,要把WS_CAPTION风格从现有的窗体风格中剥离出来。这可以先用GetWindowLong()获取到当前的窗体风格,然后通过逻辑运算将WS_CAPTION风格从中剥离开来,最后再用SetWindowLong()函数将修改后的窗体风格设置为当前的窗体风格。至于系统菜单的隐藏也可以很方便的加以实现:先保存当前菜单,然后将菜单设置为"空"就实现了菜单的隐藏。各个窗体都隐藏好后剩下的工作就是将编辑视图放大到满屏,可以用this来获取当前的视图指针,并把ShowWindow ()函数的参数设为SW_SHOWMAXIMIZED就最终完成了整个全屏放大的全过程。
至于从全屏恢复到初始状态则完全是上述过程的逆操作:通过逻辑运算把WS_CAPTION风格加入到窗体风格中,恢复标题栏的显示;通过将状态条和工具条的ShowWindow()函数的标志参数设成WM_SHOW将其分别予以恢复;系统菜单也可以通过从保存好的原始菜单中读取并重新设置来恢复其原始面貌。现在仅把隐藏的各个窗体显示了出来,窗体还是处于满屏状态,所以还要通过MoveWindow()函数把窗体的位置恢复到全屏前的状态,这也是我们为何在全屏时要保存窗体的一些原始参数的原因。
三、 程序的具体实现
前面部分在大体思路上对程序的设计实现进行了粗略的分析,但在实际编程中有不少的细节还未考虑进去,下面就根据前面的程序设计思路对其进行编码,并结合其部分关键代码进行讲解说明,以便于更好的理解本程序的实现方法:
全屏显示部分:
//通过设置SW_HIDE参数隐藏当前的工具条、任务栏
m_bToolBarWasVisible=(m_wndToolBar.IsWindowVisible()!=0);
m_wndToolBar.ShowWindow(SW_HIDE);
m_bStatusBarWasVisible=(m_wndStatusBar.IsWindowVisible()!=0);
m_wndStatusBar.ShowWindow(SW_HIDE);
……
//由于在全屏状态下没有系统菜单和工具条,所以需要显示一个浮动的工具条按钮用于//从全屏状态下返回到正常状态。
//首先创建一个工具条对象,并把一个工具条资源装载进来,同时对工具条的风格进行//设置:
m_pwndFullScreenBar=new CToolBar;
m_pwndFullScreenBar->Create(this);
m_pwndFullScreenBar->LoadToolBar(IDR_FULLSCREEN);
m_pwndFullScreenBar->SetBarStyle(m_pwndFullScreenBar->GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
//浮动按钮的效果
m_pwndFullScreenBar->ModifyStyle(0, TBSTYLE_FLAT);
m_pwndFullScreenBar->EnableDocking(0);
//设置返回到正常状态下的按钮的位置
CPoint pt(,);
FloatControlBar(m_pwndFullScreenBar,pt);
//在放大到满屏前预先保存当前的窗口位置
GetWindowRect(&m_mainRect);
//通过改变窗口风格来隐藏标题栏
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style&=~WS_CAPTION;
::SetWindowLong(m_hWnd,GWL_STYLE,style);
int screenx=GetSystemMetrics(SM_CXSCREEN);
int screeny=GetSystemMetrics(SM_CYSCREEN);
//重新改变大小:
SetWindowPos(NULL,0,0,screenx,screeny,SWP_NOZORDER);
style=::GetWindowLong(m_hWnd,GWL_STYLE);
m_bChildMax=(style & WS_MAXIMIZE)?true:false;
//保存原有的系统菜单,并将当前菜单设置为空
CMenu* pOldMenu=GetMenu();
m_OrgMenu.Attach(pOldMenu->Detach());
SetMenu((CMenu*)NULL);
//在其他窗体隐藏好后,将编辑视图放大到满屏
this->ShowWindow (SW_SHOWMAXIMIZED);
……
至于从全屏恢复到初始状态的这部分代码则相对比较简单,只需依次将隐藏的各个窗体和菜单恢复出来并将视图移动到原来大小即可,该段代码许多地方同放大到全屏时的代码相似,只是电子记账源码PHP参数有所差异而已。下面就是恢复部分的主要代码:
……
//将保存的系统菜单恢复出来
SetMenu(&m_OrgMenu);
m_OrgMenu.Detach();
//释放掉在全屏时创建的工具条指针对象,由于是用new创建的,在系统堆中为指针分//配地址空间,在程序退出时不能自动释放,所以必须要用delete显式地进行释放
delete m_pwndFullScreenBar;
//把前面剥离出去的WS_CAPTION风格在加入到窗体风格中。
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style|=WS_CAPTION;
::SetWindowLong(m_hWnd,GWL_STYLE,style);
//显示工具条、任务栏
if(m_bToolBarWasVisible)
m_wndToolBar.ShowWindow(SW_SHOW);
if(m_bStatusBarWasVisible)
m_wndStatusBar.ShowWindow(SW_SHOW);
MoveWindow(&m_mainRect);
RecalcLayout();
……
小结:
本文主要是针对单文档框架的程序进行设计的,由于不涉及到子窗体,因此比较简单。对于多文档的全屏放大,实现方法在总体思路上是与之相一致的。只是在处理全屏显示与恢复时需要将程序子框架也响应的进行放大与缩小,标题栏也要通过改变窗口风格的方式来隐藏与恢复显示。本程序对于其他基于非编辑视图的程序也是适用的。本文所述程序在Windows Professional下由Microsoft Visual C++ 6.0编译通过。
Lazarus安装和IDE
运行Lazarus IDE只需点击桌面图标,集成窗口包含源码、form、message和IDE工具。
安装后,桌面会自动出现四个浮动窗口,稍显凌乱。为使界面更有序,需调整配置。
寻找“anchordockingsdsgn”包,确保它出现在左侧列表中。点击“Save and rebuild IDE”按钮,打开确认对话框。点击“Continue”以重建IDE。
接下来,需要进行编译与重启。goto混淆代码源码点击“Continue”开始重建过程。根据电脑性能,可能需几分钟。完成编译后,Lazarus IDE自动重启。
重启后,将呈现一个集成的整体窗口的IDE环境,四个窗口融合为一。至此,Lazarus IDE调整完毕,提供更整洁、集成的编程界面。
VB系统托盘问题
如果你的代码没问题(我看没必要从网上搜代码贴给你了)
你可以试试去掉 timer过程
我把我的例子贴给你吧
(这个我运行是没问题的)
VB托盘程序详解
很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运行的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能比较完整的托盘程序,我们可以看到怎样用API函数Shell_NotifyIcon来添加、删除、更改托盘图标;而且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。
程序(附后)用到了Shell_NotifyIcon、SendMessage、CallWindowProc、SetWindowLong等API函数,其中Shell_NotifyIcon是主要的函数,它用来添加、删除、更改系统托盘区(taskbar status area)的图标,所以我们先来看看这个函数的声明和参数:
使用API函数之前必须先在程序中声明如下:
Declare Function Shell_NotifyIcon Lib "shell.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
其中各参数的意义如下表:
参数: 意义
dwMessage 为消息设置值,它可以是以下的几个常数值:0、1、2
NIM_ADD = 0 加入图标到系统状态栏中
NIM_MODIFY = 1 修改系统状态栏中的图标
NIM_DELETE = 2 删除系统状态栏中的图标
LpData 用以传入NOTIFYICONDATA数据结构变量,其结构如下所示:
Type NOTIFYICONDATA
cbSize As Long 需填入NOTIFYICONDATA数据结构的长度
HWnd As Long 设置成窗口的句柄
Uid As Long 为图标所设置的ID值
UFlags As Long 设置uCallbackMessage,hIcon,szTip是否有效
UCallbackMessage As Long 消息编号
HIcon As Long 显示在状态栏上的图标
SzTip As String * 提示信息
End Type
返回值 Long,非零表示成功,零表示失败
在使用这个API函数之前我们应该先定义结构类型NOTIFYICONDATA:
Public Type NOTIFYICONDATA
cbSize As Long HWnd As Long
Uid As Long UFlags As Long
UCallbackMessage As Long
HIcon As Long
SzTip As String *
End Type
然后定义一个NOTIFYICONDATA的变量TheData来记录设置托盘图标的数据
Private TheData As NOTIFYICONDATA
这时我们就可以使用这个函数来设置系统托盘图标了,具体方法如下:
1、添加图标
With TheData
.Uid = 0
.HWnd = frm.HWnd 'frm.HWnd是程序主窗体的句柄
.cbSize = Len(TheData)
.HIcon = frm.Icon.Handle 'frm.Icon.Handle指向主窗体的图标
.UFlags = NIF_ICON
.UCallbackMessage = TRAY_CALLBACK
'作用是允许返回消息,在下一节中会有详细解释。
.UFlags = .UFlags Or NIF_MESSAGE
.cbSize = Len(TheData)
End With
Shell_NotifyIcon NIM_ADD, TheData
'根据前面定义NIM_ADD,设置为“添加模式”,然后添加
2、删去图标
With TheData
.UFlags = 0
End With
Shell_NotifyIcon NIM_DELETE, TheData
'根据前面定义NIM_DELETE,设置为“删除模式”
3、更改图标
With TheData
.HIcon = pic.Handle
'pic是狂PictureBox,存放图标文件
.UFlags = NIF_ICON
End With
Shell_NotifyIcon NIM_MODIFY, TheData
'根据前面定义NIM_MODIFY,设置为“更改模式”
4、为图标添加浮动提示信息
With TheData
.SzTip = tip & vbNullChar
'tip是字符串string,存储提示信息
.UFlags = NIF_TIP
'指明要对浮动提示进行设置
End With
Shell_NotifyIcon NIM_MODIFY, TheData
'根据前面定义NIM_MODIFY,设置为“修改模式”
通过以上几段代码我们就能根据自己需要添加、删除、更改系统托盘图标,并能添加系统图标上的浮动提示信息。但这时的托盘图标是孤立的,我们并不能利用它来控制应用程序的行为,怎么办呢?别急,请往下看……
如果你下载(源程序下载)并运行这个例程序,你会发现如果我们在托盘图标上点击鼠标右键,则会弹出一个右键菜单。如果点击相应的菜单项,程序主窗体会随之变化,这样就可以控制程序的行为。而如果当主窗体处于最小化状态时,我们在托盘图标上点击左键,窗体会恢复到原来的大小。其实实现上述的功能都要依赖于WINDOWS操作系统的消息机制,要完全弄懂这个机制挺不容易的,但是我们可以按下述文字来理解它。
把WINDOWS操作系统看作人的大脑,它接收、处理、并发送各种各样的信息给我们的各个器官(当然是比喻各个应用程序了),也就是说它是消息的中枢。而每个应用程序(甚至每一个按钮、标签、窗体等等统称为窗口)在运行时都会被分配一个窗口过程WINDOWPROC,由这个窗口过程来接收和处理操作系统发来的消息(实际上存在一个消息队列),通常情况下这个窗口过程是由操作系统指定的,它会自动的响应并处理一些WINDOWS消息(如窗体移动、最大化、最小化、错误信息等)。好,到这我们先停一下,提出一个疑问,这些消息能否由我们自己写程序来处理呢?答案是肯定的,不过还得借助API函数的威力了,怎么用?我们还是先看看这些API函数的定义和参数吧。
程序中用到了SendMessage、CallWindowProc、SetWindowLong等API函数,其中SendMessage函数的作用是将一条消息发给某个窗口;CallWindowProc函数用来发送消息到一个窗口过程;而使用SetWindowLong函数来为窗口结构中为指定的窗口设置属性。使用API函数之前必须先在程序中声明如下:
Declare Function CallWindowProc Lib "user" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SendMessage Lib "user" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
其中各参数的意义如下表:
CallWindowProc函数
参数 意义
lpPrevWndFunc Long,原来的窗口过程地址
HWnd Long,窗口句柄
Msg Long,发送的消息
wParam Long,消息类型,参考wParam参数表
lParam Long,依据wParam参数的不同而不同
返回值 Long,依据发送的消息不同而变化
SetWindowLong函数 :
参数 意义
hwnd Long,欲为其取得信息的窗口的句柄
nIndex Long,请参考GetWindowLong函数的nIndex参数的说明
dwNewLong Long,由nIndex指定的窗口信息的新值
返回值 Long,指定数据的前一个值
SendMessage函数 :
参数 意义
hwnd Long,要接收消息的那个窗口的句柄
wMsg Long,消息的标识符
wParam Long,具体取决于消息
lParam Any,具体取决于消息
返回值 Long,由具体的消息决定
我们要自己写程序来处理消息,必须先更改窗口的属性,从原来由默认的窗口过程来处理消息变成由我们自己写的消息处理过程来处理消息。方法是使用SetWindowLong函数来取得默认窗口过程的地址,然后转向为我们自己写的窗口过程的地址,具体的实现方法如下代码:
'GWL_WNDPROC获得该窗口的窗口过程的地址,AddressOf是取址函数,NewWindowProc是我们写的过程
OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, AddressOf
NewWindowProc)
然后在NewWindowProc函数中写入如下代码,需要注意的是下面代码中红色的TRAY_CALLBACK是由托盘区图标传来的消息,要让托盘图标传回消息,必须在添加托盘图标时指定:
Public Function NewWindowProc(ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'如果用户点击了托盘中的图标,则进行判断是点击了左键还是右键
If Msg = TRAY_CALLBACK Then
'如果点击了左键
If lParam = WM_LBUTTONUP Then
'而这时窗体的状态是最小化时
If TheForm.WindowState = vbMinimized Then _
'恢复到最小化前的窗体状态
TheForm.WindowState = TheForm.LastState
TheForm.SetFocus
Exit Function
End If
End If
'如果点击了右键
If lParam = WM_RBUTTONUP Then
'则弹出右键菜单
TheForm.PopupMenu TheMenu
Exit Function
End If
End If
'如果是其他类型的消息则传递给原有默认的窗口函数
NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam)
End Function
这样我们就取得并处理了来自托盘图标的消息,现在的问题是在鼠标右键菜单弹出后,怎么控制程序主窗体的状态,这时我们需要用到SendMessage函数来向主窗体发送最大化、最小化、关闭、移动等消息,具体的代码实现如下,其中HWnd是主窗体的句柄,WM_SYSCOMMAND表示发送的是系统控制类的消息,SC_MOVE、SC_SIZE、SC_RESTORE便是要发送的消息了:
'托盘图标右键菜单上的“移动”项被点击时
Private Sub mnuTrayMove_Click()
SendMessage HWnd, WM_SYSCOMMAND, SC_MOVE, 0&
End Sub
'托盘图标右键菜单上的“恢复”项被点击时
Private Sub mnuTrayRestore_Click()
SendMessage HWnd, WM_SYSCOMMAND, SC_RESTORE, 0&
End Sub
'托盘图标右键菜单上的“退出”项被点击时
Private Sub mnuTraySize_Click()
SendMessage HWnd, WM_SYSCOMMAND, SC_SIZE, 0&
End Sub
最后要提醒你,在程序退出时一定要把窗口过程的地址恢复为默认值,同时把托盘图标移去哦。
为了学习方便,以下提供了源代码:
'---------------------------------------------
' 使用系统托盘程序演示
'---------------------------------------------
'程序说明:
' 这是一个比较完整的使用系统托盘的程序实例,包括
'了:添加托盘图标,删除托盘图标,动态改变托盘图标,
'为托盘图标添加浮动提示信息,实现托盘图标的鼠标右键
'菜单等内容。
'-------名称-------------------作用------------
' Form1 主窗体
' mnuFile,mnuFileExit 文件菜单,菜单项
' mnuTray,mnuTrayClose... 托盘区右键菜单,菜单项
'---------------------------------------------
Option Explicit
'LastState变量的作用是标示主窗体原有状态
Public LastState As Integer
'VB声明
' Private Declare Function SendMessage Lib "user" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'说明
' 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum,
' SendMessageByString是该函数的“类型安全”声明形式
'返回值
' Long,由具体的消息决定
'参数表
' hwnd ----------- Long,要接收消息的那个窗口的句柄
' wMsg ----------- Long,消息的标识符
' wParam --------- Long,具体取决于消息
' lParam --------- Any,具体取决于消息
Private Declare Function SendMessage Lib "user" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'表示发送的是系统命令
Private Const WM_SYSCOMMAND = &H
Private Const SC_MOVE = &HF&
Private Const SC_RESTORE = &HF&
Private Const SC_SIZE = &HF&
'当主窗体加载时
Private Sub Form_Load()
'窗体的WindowState属性,返回或设置一个值,该值用来指定在运行时窗体窗口的可视状态
'vbNormal 0 (缺省值)正常 。
'VbMinimized 1 最小化(最小化为一个图标)
'VbMaximized 2 最大化(扩大到最大尺寸)
If WindowState = vbMinimized Then
LastState = vbNormal
Else
LastState = WindowState
End If
'将图标添加到托盘的函数,参见模块中的解释
'注意了这是从主程序到模块的入口,本例中并没有直接调用Shell_NotifyIcon函数
AddToTray Me, mnuTray
SetTrayTip "托盘图标演示,点击右键弹出菜单"
End Sub
'在主窗体Form1大小改变时,相应改变右键菜单mnuTray的菜单项的可用属性Enabled
Private Sub Form_Resize()
Select Case WindowState
'如果窗体最小化了,把菜单项“最大化”“恢复”设为可用,
'而把“最小化”“移动”“大小”三项设为不可用.
'如果这时在托盘图标上点击鼠标右键,会发现不可用项变为灰色
Case vbMinimized
mnuTrayMaximize.Enabled = True
mnuTrayMinimize.Enabled = False
mnuTrayMove.Enabled = False
mnuTrayRestore.Enabled = True
mnuTraySize.Enabled = False
'窗体最大化时
Case vbMaximized
mnuTrayMaximize.Enabled = False
mnuTrayMinimize.Enabled = True
mnuTrayMove.Enabled = False
mnuTrayRestore.Enabled = True
mnuTraySize.Enabled = False
'一般状态下
Case vbNormal
mnuTrayMaximize.Enabled = True
mnuTrayMinimize.Enabled = True
mnuTrayMove.Enabled = True
mnuTrayRestore.Enabled = False
mnuTraySize.Enabled = True
End Select
If WindowState <> vbMinimized Then LastState = WindowState
End Sub
'保证在程序退出时删除托盘图标
Private Sub Form_Unload(Cancel As Integer)
RemoveFromTray
End Sub
'“文件”菜单的“退出”项被点击时
Private Sub mnuFileExit_Click()
Unload Me
End Sub
'托盘图标右键菜单上的“退出”项被点击时
Private Sub mnuTrayClose_Click()
Unload Me
End Sub
'托盘图标右键菜单上的“最大化”项被点击时
Private Sub mnuTrayMaximize_Click()
WindowState = vbMaximized
End Sub
'托盘图标右键菜单上的“最小化”项被点击时
Private Sub mnuTrayMinimize_Click()
WindowState = vbMinimized
End Sub
'托盘图标右键菜单上的“移动”项被点击时
Private Sub mnuTrayMove_Click()
SendMessage HWnd, WM_SYSCOMMAND, _
SC_MOVE, 0&
End Sub
'托盘图标右键菜单上的“恢复”项被点击时
Private Sub mnuTrayRestore_Click()
SendMessage HWnd, WM_SYSCOMMAND, _
SC_RESTORE, 0&
End Sub
'托盘图标右键菜单上的“退出”项被点击时
Private Sub mnuTraySize_Click()
SendMessage HWnd, WM_SYSCOMMAND, _
SC_SIZE, 0&
End Sub
'-----------------------------------------
'以下为模块中的代码:
'-----------------------------------------
Option Explicit
Public OldWindowProc As Long
Public TheForm As Form
Public TheMenu As Menu
'VB声明
'Declare Function CallWindowProc Lib "user" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'说明
' 此函数发送消息到一个窗口过程
'返回值
' Long,依据发送的消息不同而变化
'参数表
' lpPrevWndFunc----- Long,原来的窗口过程地址
' HWnd-------------- Long,窗口句柄
' Msg -------------- Long,发送的消息
' wParam ----------- Long,消息类型,参考wParam参数表
' lParam ----------- Long,依据wParam参数的不同而不同
Declare Function CallWindowProc Lib "user" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'VB声明
' Private Declare Function SetWindowLong Lib "user" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'说明
' 在窗口结构中为指定的窗口设置信息
'返回值
' Long,指定数据的前一个值
'参数表
' hwnd ----------- Long,欲为其取得信息的窗口的句柄
' nIndex --------- Long,请参考GetWindowLong函数的nIndex参数的说明
' dwNewLong ------ Long,由nIndex指定的窗口信息的新值
Declare Function SetWindowLong Lib "user" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'VB声明
'Declare Function Shell_NotifyIcon Lib "shell.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'说明
'参数表
'参数dwMessage ---- 为消息设置值,它可以是以下的几个常数值:0、1、2
'NIM_ADD = 0 加入图标到系统状态栏中
'NIM_MODIFY = 1 修改系统状态栏中的图标
'NIM_DELETE = 2 删除系统状态栏中的图标
'参数LpData ---- 用以传入NOTIFYICONDATA数据结构变量,我们也需要在"模块"中定义其结构如下:
'Type NOTIFYICONDATA
' cbSize As Long 需填入NOTIFYICONDATA数据结构的长度
' HWnd As Long 设置成窗口的句柄
' Uid As Long 为图标所设置的ID值
' UFlags As Long 用来设置以下三个参数uCallbackMessage、hIcon、szTip是否有效
' UCallbackMessage As Long 消息编号
' HIcon As Long 显示在状态栏上的图标
' SzTip As String * 提示信息
'End Type
'---- 其中参数uCallbackMessage、hIcon、szTip也应在模块中声明为以下的常量:
'Public Const NIF_MESSAGE = 1
'Public Const NIF_ICON = 2
'Public Const NIF_TIP = 4
Declare Function Shell_NotifyIcon Lib "shell.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Const WM_USER = &H
Public Const WM_LBUTTONUP = &H
Public Const WM_MBUTTONUP = &H
Public Const WM_RBUTTONUP = &H
Public Const TRAY_CALLBACK = (WM_USER + &)
Public Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-)
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIF_MESSAGE = &H1
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
'记录 设置托盘图标的数据 的数据类型NOTIFYICONDATA
Public Type NOTIFYICONDATA
cbSize As Long
HWnd As Long
Uid As Long
UFlags As Long
UCallbackMessage As Long
HIcon As Long
SzTip As String *
End Type
'TheData变量记录设置托盘图标的数据
Private TheData As NOTIFYICONDATA
'