[原创]马大哈系列功能模块-----托盘图标类(VB6.0)
<P>改自老外的一个标准模块,原模块是使用SubClass技术.</P><P>我本意是想改为不使用SubClass,但是遇到一点麻烦,还没解决....</P>
<P>先放上这个利用图片框WndProc的类来.</P>
<P>以下是部分代码:</P>
<P>'*************************************************************************<BR>'**模 块 名:cTray<BR>'**说 明:设置托盘图标<BR>'**创 建 人:马大哈 <A href="http://www.m5home.com/">http://www.m5home.com/</A><BR>'**日 期:2007年3月5日<BR>'**版 本:V1.0<BR>'**备 注:改自老外一个标准模块,封装成为一个类.<BR>'*************************************************************************<BR>Option Explicit</P>
<P>Public Sub DelTrayIco()<BR> '删除托盘图标<BR>' DoEvents<BR> With TheData<BR> .uFlags = 0<BR> End With<BR> Shell_NotifyIcon NIM_DELETE, TheData<BR>End Sub</P>
<P>Public Sub AddTrayIco(ByRef EventPic As PictureBox)<BR> '设置托盘图标<BR> On Error Resume Next<BR> <BR> Set cPic = EventPic<BR> With TheData<BR> .uID = 0<BR> .hWnd = cPic.hWnd<BR> .cbSize = Len(TheData)<BR> .uFlags = NIF_ICON<BR> .uCallbackMessage = WM_MOUSEMOVE<BR> .uFlags = .uFlags Or NIF_MESSAGE<BR> End With<BR> Shell_NotifyIcon NIM_ADD, TheData<BR>End Sub</P>
<P>Public Sub SetTrayTip(Tip As String)<BR> '设置提示信息<BR> With TheData<BR> .szTip = Tip & vbNullChar<BR> .uFlags = NIF_TIP<BR> End With<BR> Shell_NotifyIcon NIM_MODIFY, TheData<BR>End Sub</P>
<P>Public Sub SetTrayIcon(Pic As StdPicture)<BR> If Pic.Type <> vbPicTypeIcon Then Exit Sub</P>
<P> With TheData<BR> .hIcon = Pic.Handle<BR> .uFlags = NIF_ICON<BR> End With<BR> Shell_NotifyIcon NIM_MODIFY, TheData<BR>End Sub</P>
<P>Private Sub cPic_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)<BR> x = x / Screen.TwipsPerPixelX<BR> Select Case x<BR> Case WM_LBUTTONUP '左键抬起<BR> RaiseEvent MouseClick(vbLeftButton, False)<BR> Case WM_LBUTTONDBLCLK '左键双击<BR> RaiseEvent MouseClick(vbLeftButton, True)<BR> Case WM_RBUTTONUP '右键抬起<BR> RaiseEvent MouseClick(vbRightButton, False)<BR> Case WM_RBUTTONDBLCLK '右键双击<BR> RaiseEvent MouseClick(vbRightButton, True)<BR> Case WM_MBUTTONUP '中键抬起<BR> RaiseEvent MouseClick(vbMiddleButton, False)<BR> Case WM_MBUTTONDBLCLK '中键双击<BR> RaiseEvent MouseClick(vbMiddleButton, True)<BR> End Select<BR>End Sub</P>
<P> </P>
<P>示例工程在此下载:</P>
<P> </P>
<P><FONT color=#602464><A href="http://www.m5home.com/blog2/attachments/month_0703/u20073521427.rar">http://www.m5home.com/blog2/attachments/month_0703/u20073521427.rar</A></FONT><A href="http://www.m5home.com/blog2/blogview.asp?logID=203" target=_blank></A></P>
<P> </P>
<P><FONT color=#ff0000><STRONG>*********************************** 已经修正了地址了.............-_-b</STRONG></FONT></P>
<P align=right><FONT color=#000066>[此贴子已经被作者于2008-11-5 16:22:46编辑过]</FONT></P> <p>楼主的示例工程地址错误了.</p>
<p>我在存档BLOG里找到了正确的地址:</p>
<p><font face="Verdana"><a href="http://www.m5home.com/blog/blogview.asp?logID=203">http://www.m5home.com/blog/blogview.asp?logID=203</a></font></p> 谢谢....地址已经修正......- -b 哈 老马的网站全是好东西啊,学习学习~ <p>看看, 改进一下我的助手, 谢谢啦,</p>
<p> </p>
<p>07的帖子,. 08年还编辑, 不错.</p> <p>好用</p> 为什么退出程序了托盘图标还有残留,要用鼠标过去晃一下才会消失,右键菜单点出来后点一下其他地方菜单也不会消失Private Sub Form_Unload(Cancel As Integer)
cTrayIco.DelTrayIco
Set cTrayIco = Nothing
End Sub DelTrayIco的代码是这样:Public Sub DelTrayIcon()
'删除托盘图标
With TheData
.uFlags = 0
End With
Shell_NotifyIcon NIM_DELETE, TheData
DoEvents
End Sub此代码目前为止只有你遇到了无法删除的情况,那请给出更详细的信息出来,方便分析.
至于弹出菜单问题,原因是菜单弹出后本进程并未获得焦点,则点击别的地方时,也没有产生"失去焦点"的消息,所以系统并未收回那个弹出菜单.
解决方案很简单,每次弹出菜单前,调用一下SetForegroundWindow即可. 此贴不顶不行呀,太感谢了! 怎么地址又错了??
页:
[1]