首页 >> 读书频道 >> 电脑 >> VB托盘程序详解中
 
· 有声样式单
· VB托盘程序详解上
· SENDMESSAGE函
· 计数器和自动编号
· 向控件发送系统热键
· SENDMESSAGE函
· 格式化页面
· 在VB中终止Win9X
· CSS2中有哪些新特点?
· 回调(CallBacks
· 使Shell指令具Wai
· 使Shell指令具Wai
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

VB托盘程序详解中


查看有无更新版本

关键字:VB 2006-9-18

 

如果你下载(源程序下载)并运行这个例程序,你会发现如果我们在托盘图标上点击鼠标右键,则会弹出一个右键菜单。如果点击相应的菜单项,程序主窗体会随之变化,这样就可以控制程序的行为。而如果当主窗体处于最小化状态时,我们在托盘图标上点击左键,窗体会恢复到原来的大小。其实实现上述的功能都要依赖于WINDOWS操作系统的消息机制,要完全弄懂这个机制挺不容易的,但是我们可以按下述文字来理解它。

把WINDOWS操作系统看作人的大脑,它接收、处理、并发送各种各样的信息给我们的各个器官(当然是比喻各个应用程序了),也就是说它是消息的中枢。而每个应用程序(甚至每一个按钮、标签、窗体等等统称为窗口)在运行时都会被分配一个窗口过程WINDOWPROC,由这个窗口过程来接收和处理操作系统发来的消息(实际上存在一个消息队列),通常情况下这个窗口过程是由操作系统指定的,它会自动的响应并处理一些WINDOWS消息(如窗体移动、最大化、最小化、错误信息等)。好,到这我们先停一下,提出一个疑问,这些消息能否由我们自己写程序来处理呢?答案是肯定的,不过还得借助API函数的威力了,怎么用?我们还是先看看这些API函数的定义和参数吧。 

程序中用到了SendMessage、CallWindowProc、SetWindowLong等API函数,其中SendMessage函数的作用是将一条消息发给某个窗口;CallWindowProc函数用来发送消息到一个窗口过程;而使用SetWindowLong函数来为窗口结构中为指定的窗口设置属性。使用API函数之前必须先在程序中声明如下:

 Declare Function CallWindowProc Lib "user32" 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 "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 

 Private Declare Function SendMessage Lib "user32" 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

VB托盘程序详解中

[ 1 ]
VB托盘程序详解中 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑