Public Function Integer Shell_NotifyIcon
(Long dwMessage, Any lpData) Library "shell32"
Alias For "Shell_NotifyIconA"
Public Function Long LoadImage (Long hInst,
String lpsz, Long un1, Long n1, Long n2, Long un2)
Library "user32" Alias For "LoadImageA"
Public Function Long DestroyIcon (Long hIcon)
Library "user32" Alias For "DestroyIcon"
Public Function Long SetForegroundWindow (Long hwnd)
Library "user32" Alias For "SetForegroundWindow"
Public Function Long OpenIcon (Long hwnd)
Library "user32" Alias For "OpenIcon"
---- 2、应用入口
---- 在Application的Open Scripts中,输入下列函数:
Cbsize Long
Hwnd Long
Uid Long
Uflags Long
Ucallbackmessage Long
Hicon Long
Sztip any
---- 再定义三个函数:
---- 1、AddToTray(),参数:无;返回值:布尔值(True/False)
// Boolean AddToTray ()
Any nid
if hIcon = 0 then
// the icon has not been loaded yet
hIcon = LoadImage(0, "SysTray.ico",
IMAGE_ICON, 0, 0, LR_LOADFROMFILE)
end if
if hIcon = 0 then
MessageBox ("错误", "不能加载图标!")
Return False
else
nid = SetNotifyIconData (Handle (This), 0,
NIF_MESSAGEorNIF_ICONorNIF_TIP, WM_MOUSEMOVE,
hIcon, "TestTip")
Shell_NotifyIcon (NIM_ADD, nid)
Return True
end if
---- 2、RemoveFromTray ();参数:无;返回值:无
// RemoveFromTray ()
Any nid
nid = SetNotifyIconData (Handle (This), 0,
NIF_MESSAGEorNIF_ICONorNIF_TIP, 0, hIcon, "")
Shell_NotifyIcon (NIM_DELETE, nid)
if hIcon < > 0 then DestroyIcon (hIcon)
hIcon = 0
---- 3、SetNotifyIconData (Long hWnd, Long ID, Long Flags,
Long CallbackMessage, Long Icon, String Tip);
返回值:notifyicondata
// NotifyIconData SetNotifyIconData (Long hWnd, Long ID,
Long Flags, Long CallbackMessage, Long Icon, String Tip)
Char MyTip [64]
NotifyIconData NidTemp
NidTemp.cbSize = 88 // Len (NidTemp)
NidTemp.hWnd = hWnd
NidTemp.uID = ID
NidTemp.uFlags = Flags
NidTemp.uCallbackMessage = CallbackMessage
NidTemp.hIcon = Icon
MyTip = Tip + Char (0)
NidTemp.szTip = MyTip
return NidTemp
最后,在窗口的有关事件中输入函数:
Open 事件
if AddToTray () then Visible = False
Close 事件
RemoveFromTray ()
CloseQuery 事件
if CanClose then
Return 0
else
Visible = False
Return 0
End if
Resize事件
if sizetype = 1 then Visible = False
四、 测试
---- 完成上述工作后,就可以运行并加以测试了。进入运行,在图标栏中就注册了一个图标,单击就弹出窗口,窗口示例如下图所示(略):
---- 这时,最小化该窗口,不会在Windows 9.x或Windows NT的任务栏中显示,而是缩小成一个在图标栏中的图标。
---- 上述示例在Windows 9.8、Windows NT V4.0和PowerBuilder 6.5下测试通过。