谁知道双击图标怎么还原托盘上的应用

 我来答
无与伦比OK传奇
2016-12-27 · TA获得超过177个赞
知道小有建树答主
回答量:971
采纳率:60%
帮助的人:162万
展开全部
注意事项:一定记得建立菜单并且名称必须和代码中的一致或者修改代码中的名称否则会有错误提示,在代码最后有一段代码,把这段代码复制到窗体代码里面取消注释即可建立步骤:1.新建一个工程,设置窗体的属性BoarderStyle为1-FixedsingleMinButton为trueShowIntaskbar为false把下文的窗体代码内容复制到工程的窗体代码框;2.工程添加一个模块并把文中的模块代码复制到模块代码里;3.右键点击窗体选择菜单编辑器,在名称中输入mnuTray,标题为“右键菜单”,可见复选框设为非选择状态;点击下一个,点击右箭头,在名称里输入mnuTrayexit,标题为“退出”;最后点击确定。4.点击工具栏中的启动按钮,运行程序;5.点击最小化键,在托盘显示出图标并隐藏了窗口即:最小化到系统状态栏。右键点击一下托盘图标,弹出菜单。左键点击托盘图标窗口还原。更改托盘图标:方法一:设置工程窗体的图标,即在窗体的属性中的Icon中选择自定义的*.ico文件。代码中使用的是窗体的图标;方法二:使用一个图片框存储图标,并把图片框的句柄赋给Thedata中的HIcon即可,在with.endwith中修改或直接Thedata.HIcon=即可。TheData.HIcon=Picture1.Picture.Handle'把图片框的图片句柄赋给TheData.HIconShell_NotifyIconNIM_MODIFY,TheData动态显示托盘图标:添加定时器,每到定时值触发一次事件更换图标;重新设置Thedata.HIcon为新的图标然后使用Shell_NotifyIconNIM_MODIFY,TheData修改图标显示。***************************************模块代码***********************************************OptionExplicitPublicOldWindowProcAsLongPublicTheFormAsFormPublicTheMenuAsMenuPublicConstWM_USER=&H400PublicConstWM_LBUTTONUP=&H202'左键消息编号PublicConstWM_MBUTTONUP=&H208'中键消息编号PublicConstWM_RBUTTONUP=&H205'右键消息编号PublicConstTRAY_CALLBACK=(WM_USER+1001&)'消息编号PublicConstGWL_WNDPROC=(-4)PublicConstNIF_ICON=&H2'PublicConstNIF_TIP=&H4PublicConstNIF_MESSAGE=&H1PublicConstNIM_ADD=&H0PublicConstNIM_MODIFY=&H1PublicConstNIM_DELETE=&H2PublicTypeNOTIFYICONDATA'定义结构NOTIFYICONDATAcbSizeAsLonghwndAsLongUidAsLongUFlagsAsLongUCallbackMessageAsLongHIconAsLongSzTipAsString*64EndTypePublicTheDataAsNOTIFYICONDATA'定义结构对象TheDataPublicDeclareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"(ByVallpPrevWndFuncAsLong,ByValhwndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLongPublicDeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLongPublicDeclareFunctionShell_NotifyIconLib"shell32.dll"Alias"Shell_NotifyIconA"(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLongPublicDeclareFunctionSetForegroundWindowLib"user32"(ByValhwndAsLong)AsLongPublicFunctionNewWindowProc(ByValhwndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong'自己建立的消息循环处理过程IfMsg=TRAY_CALLBACKThenIflParam=WM_LBUTTONUPThenIfTheForm.WindowState=vbMinimizedThenRemoveTrayTheForm.WindowState=vbNormalTheForm.ShowTheForm.SetFocusExitFunctionEndIfEndIfIflParam=WM_RBUTTONUPThenSetForegroundWindowTheForm.hwnd'按下右键时使窗体获得焦点,这也可以使用TheForm.SetFocus代替以实现右键菜单弹出后不能消失的问题TheForm.PopupMenuTheMenu'弹出菜单ExitFunctionEndIfEndIfNewWindowProc=CallWindowProc(OldWindowProc,hwnd,Msg,wParam,lParam)'把原来消息函数的消息传递给自定义的消息函数EndFunctionPublicSubSetTray()'调用此子过程添加托盘图标OldWindowProc=SetWindowLong(TheForm.hwnd,GWL_WNDPROC,AddressOfNewWindowProc)'设置新的自定义消息循环函数以进行左、右键按键处理'存储原来消息函数地址到OldWindowProcWithTheData.Uid=0.hwnd=TheForm.hwnd.cbSize=Len(TheData).HIcon=TheForm.Icon.Handle.UFlags=NIF_ICON.UCallbackMessage=TRAY_CALLBACK.UFlags=.UFlagsOrNIF_MESSAGEOrNIF_TIP.SzTip="右键退出菜单"&vbNullChar.cbSize=Len(TheData)EndWithShell_NotifyIconNIM_ADD,TheData'显示托盘图标EndSubPublicSubMinimized()'调用此子过程最小化隐藏窗体IfTheForm.WindowState=vbMinimizedThenTheForm.HideEndSubPublicSubRemoveTray()'调用此子过程删除托盘图标WithTheData.UFlags=0EndWithShell_NotifyIconNIM_DELETE,TheData'删除托盘图标SetWindowLongTheForm.hwnd,GWL_WNDPROC,OldWindowProc'恢复消息循环函数为原有的EndSub*************************************代码结束*************************************************'模块说明:模块包括建立托盘图标,删除托盘图标,最小化隐藏窗体,自定义消息循环函数'Settray子过程:功能为建立托盘图标,即调用此过程会设置自定义消息循环函数并建立托盘图标以及右键弹出菜单'Minimized子过程:功能为最小化时隐藏TheForm窗体'RemoveTray子过程:功能为删除托盘图标并恢复消息循环函数为原来函数'在窗体上应该使用菜单编辑器编辑一个菜单mnuTray并建立其子菜单mnuTrayexit(退出),在mnuTrayexit(退出)的click事件里应该调用RemoveTray子过程并unloadme;'TheForm在开始时(Formload过程)应该指定为窗体Me;TheMenu在开始时(Formload过程)应该指定为菜单名称mnuTray;'为实现最小化时托盘显示应该在Form_Resize过程中隐藏窗体并调用Settray子过程以及Minimized子过程以建立托盘图标并隐藏窗体'以下为基本的建立托盘图标的过程代码*************************************窗体代码内容*********************************************PrivateSubForm_Load()SetTheForm=Me'窗体SetTheMenu=mnuTray'菜单名称,一定要建立菜单且名称必须与代码的一致'代码中的菜单名称为mnuTray,标题自定义,mnuTray的子菜单为弹出来的菜单例中只建立了一个子菜单mnuTrayexitEndSubPrivateSubForm_Resize()IfTheForm.WindowState=vbMinimizedThenSetTray'调用过程显示托盘图标Minimized'调用过程最小化隐藏窗体,效果为最小化到托盘EndIfEndSubPrivateSubmnuTrayexit_Click()RemoveTray'调用过程删除托盘图标UnloadTheForm'卸载窗体EndSub*************************************代码结束*************************************************
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式