找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7574|回复: 9

[原创]马大哈系列功能模块-----托盘图标类(VB6.0)

  [复制链接]

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2007-3-5 21:22:09 | 显示全部楼层 |阅读模式
<P>改自老外的一个标准模块,原模块是使用SubClass技术.</P>
<P>我本意是想改为不使用SubClass,但是遇到一点麻烦,还没解决....</P>
<P>先放上这个利用图片框WndProc的类来.</P>
<P>以下是部分代码:</P>
<P>'*************************************************************************<BR>'**模 块 名:cTray<BR>'**说&nbsp;&nbsp;&nbsp; 明:设置托盘图标<BR>'**创 建 人:马大哈 <A href="http://www.m5home.com/">http://www.m5home.com/</A><BR>'**日&nbsp;&nbsp;&nbsp; 期:2007年3月5日<BR>'**版&nbsp;&nbsp;&nbsp; 本:V1.0<BR>'**备&nbsp;&nbsp;&nbsp; 注:改自老外一个标准模块,封装成为一个类.<BR>'*************************************************************************<BR>Option Explicit</P>
<P>Public Sub DelTrayIco()<BR>&nbsp;&nbsp;&nbsp; '删除托盘图标<BR>'&nbsp;&nbsp;&nbsp; DoEvents<BR>&nbsp;&nbsp;&nbsp; With TheData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .uFlags = 0<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; Shell_NotifyIcon NIM_DELETE, TheData<BR>End Sub</P>
<P>Public Sub AddTrayIco(ByRef EventPic As PictureBox)<BR>&nbsp;&nbsp;&nbsp; '设置托盘图标<BR>&nbsp;&nbsp;&nbsp; On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Set cPic = EventPic<BR>&nbsp;&nbsp;&nbsp; With TheData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .uID = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .hWnd = cPic.hWnd<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .cbSize = Len(TheData)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .uFlags = NIF_ICON<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .uCallbackMessage = WM_MOUSEMOVE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .uFlags = .uFlags Or NIF_MESSAGE<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; Shell_NotifyIcon NIM_ADD, TheData<BR>End Sub</P>
<P>Public Sub SetTrayTip(Tip As String)<BR>&nbsp;&nbsp;&nbsp; '设置提示信息<BR>&nbsp;&nbsp;&nbsp; With TheData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .szTip = Tip &amp; vbNullChar<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .uFlags = NIF_TIP<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; Shell_NotifyIcon NIM_MODIFY, TheData<BR>End Sub</P>
<P>Public Sub SetTrayIcon(Pic As StdPicture)<BR>&nbsp;&nbsp;&nbsp; If Pic.Type &lt;&gt; vbPicTypeIcon Then Exit Sub</P>
<P>&nbsp;&nbsp;&nbsp; With TheData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .hIcon = Pic.Handle<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .uFlags = NIF_ICON<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; x = x / Screen.TwipsPerPixelX<BR>&nbsp;&nbsp;&nbsp; Select Case x<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case WM_LBUTTONUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '左键抬起<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RaiseEvent MouseClick(vbLeftButton, False)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case WM_LBUTTONDBLCLK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '左键双击<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RaiseEvent MouseClick(vbLeftButton, True)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case WM_RBUTTONUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '右键抬起<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RaiseEvent MouseClick(vbRightButton, False)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case WM_RBUTTONDBLCLK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '右键双击<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RaiseEvent MouseClick(vbRightButton, True)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case WM_MBUTTONUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '中键抬起<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RaiseEvent MouseClick(vbMiddleButton, False)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case WM_MBUTTONDBLCLK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '中键双击<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RaiseEvent MouseClick(vbMiddleButton, True)<BR>&nbsp;&nbsp;&nbsp; End Select<BR>End Sub</P>
<P>&nbsp;</P>
<P>示例工程在此下载:</P>
<P>&nbsp;</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>&nbsp;</P>
<P><FONT color=#ff0000><STRONG>*********************************** 已经修正了地址了.............-_-b</STRONG></FONT></P>
<P align=right><FONT color=#000066>[此贴子已经被作者于2008-11-5 16:22:46编辑过]</FONT></P>
我就是嗷嗷叫的老马了......

76

主题

375

回帖

0

精华

铜牌会员

积分
231
发表于 2008-11-4 15:08:54 | 显示全部楼层
<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>

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2008-12-19 14:56:10 | 显示全部楼层
谢谢....地址已经修正......- -b
我就是嗷嗷叫的老马了......

0

主题

7

回帖

0

精华

铜牌会员

积分
216
发表于 2008-12-23 10:06:27 | 显示全部楼层
哈 老马的网站全是好东西啊,学习学习~[em218]

0

主题

4

回帖

0

精华

初来乍到

积分
296
发表于 2009-1-4 00:46:33 | 显示全部楼层
<p>看看, 改进一下我的助手, 谢谢啦,</p>
<p>&nbsp;</p>
<p>07的帖子,. 08年还编辑, 不错.</p>

76

主题

375

回帖

0

精华

铜牌会员

积分
231
发表于 2009-2-3 14:07:14 | 显示全部楼层
<p>好用[em57]</p>

0

主题

1

回帖

0

精华

初来乍到

积分
15
发表于 2010-1-28 03:36:38 | 显示全部楼层
为什么退出程序了托盘图标还有残留,要用鼠标过去晃一下才会消失,右键菜单点出来后点一下其他地方菜单也不会消失
  1. Private Sub Form_Unload(Cancel As Integer)
  2.     cTrayIco.DelTrayIco
  3.     Set cTrayIco = Nothing
  4. End Sub
复制代码

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2010-1-28 12:41:16 | 显示全部楼层
DelTrayIco的代码是这样:
  1. Public Sub DelTrayIcon()
  2.     '删除托盘图标
  3.     With TheData
  4.         .uFlags = 0
  5.     End With
  6.     Shell_NotifyIcon NIM_DELETE, TheData
  7.     DoEvents
  8. End Sub
复制代码
此代码目前为止只有你遇到了无法删除的情况,那请给出更详细的信息出来,方便分析.

至于弹出菜单问题,原因是菜单弹出后本进程并未获得焦点,则点击别的地方时,也没有产生"失去焦点"的消息,所以系统并未收回那个弹出菜单.

解决方案很简单,每次弹出菜单前,调用一下SetForegroundWindow即可.
我就是嗷嗷叫的老马了......

0

主题

12

回帖

0

精华

初来乍到

积分
5
发表于 2010-1-30 22:11:57 | 显示全部楼层
此贴不顶不行呀,太感谢了!

0

主题

2

回帖

0

精华

初来乍到

积分
49
发表于 2010-6-13 16:44:19 | 显示全部楼层
怎么地址又错了??
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表