欢迎来到天天文库
浏览记录
ID:8824038
大小:29.25 KB
页数:17页
时间:2018-04-08
《利用visualc实现系统托盘程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、利用VisualC++实现系统托盘程序这些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,程序开发人员有时也需要编制一些仅在后台运行的类似程序,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使程序运行时的主窗口不可见。同时将一个图标显示在任务栏右端静态通告区中并响应用户的鼠标动作。本实例就介绍VisualC++开发这类程序的设计方法,该程序编译运行后,如果双击托盘图标,程序会弹出一个消息列表窗口,只要鼠标在托盘图标上移动或点击(无论是左右键的单击或双击),产生的消息都会显示在这个窗口里;当鼠标光标移到托盘图标上时,在图标附
2、近会显示提示信息;单击右键时弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令,另外,该程序还可以动态的改变托盘的图标。参照这个例子,相信读者能轻松自如地在自己的程序中应用系统托盘。一、实现方法为了实现拖盘程序,首先要使程序的主窗口不可见,这点实现起来十分容易,只要调用ShowWindow(SW_HIDE)就可以了,本实例采用的就是这种方法,还有一种思路是通过分别设置主边框窗口的风格和扩展风格来隐藏主框架:BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs){cs.style=WS_POPUP;//使主窗口
3、不可见;cs.dwExStyle=WS_EX_TOOLWINDOW;//不显示任务按钮;returnCFrameWnd::PreCreateWindow(cs);}在任务条上显示图标是利用系统API函数Shell_NotifyIcon()来将一个图标显示在任务栏的通告区中。该函数的原型为:BOOLShell_NotifyIcon(DWORDdwMessage,PNOTIFYICONDATApnid);该函数的第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:NIM_ADD:添加一个图标到任务栏。NIM_MODIFY:修改状态栏区域的图标。NIM_
4、DELETE:删除状态栏区域的图标。NIM_SETFOCUS:将焦点返回到任务栏通知区域。当完成用户界面操作时,任务栏图标必须用此消息。例如,如果任务栏图标正显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。NIM_SETVERSION:指示任务栏按照相应的动态库版本工作。第二个参数pnid是NOTIFYICONDATA结构的地址,其内容视dwMessage的值而定。这个结构在SHELLAPI.H文件中定义如下:typedefstruct_NOTIFYICONDATA{DWORDcbSize;//结构大小(sizeofstruct)
5、,必须设置HWNDhWnd;//发送通知消息的窗口句柄UINTuID;//图标ID(由回调函数的WPARAM指定)UINTuFlags;UINTuCallbackMessage;//消息被发送到此窗口过程HICONhIcon;//任务栏图标句柄CHARszTip[64];//提示文本}NOTIFYICONDATA;该结构中uFlags的值分别为:#defineNIF_MESSAGE0x1//表示uCallbackMessage有效#defineNIF_ICON0x2//表示hIcon有效#defineNIF_TIP0x4//表示szTip有效在该结构的成员中,cbSize为该结构所
6、占的字节数,hWnd为接受该图标所发出的消息的窗口的句柄(鼠标在任务栏上程序图标上动作时图标将发出消息,这个消息用户要自己定义),uID为被显示图标的ID,uFlags指明其余的几个成员(hIcon、uCallBackMessage和szTip)的值是否有效,uCallbackMessage为一个用户自定义的消息,当用户在该图标上作用一些鼠标动作时,图标将向应用程序的主框架窗口(hWnd成员中指定的窗口)发出该消息,为了使程序的主框架得到该通知消息,需要设置NOTIFYICONDATA结构的flag成员的值为NIF_MESSAGE。hIcon为将在任务栏上显示的图标句柄,szTip
7、鼠标停留在该图标上时显示的提示字符串。尽管Shell_NotifyIcon函数简单实用,但它毕竟是个Win32API,为此本实例将它封装在了一个C++类中,这个类叫做CTrayIcon,有了它,托盘编程会更加轻松自如,因为它隐藏了NOTIFYICONDATA、消息代码、标志以及一些繁琐的细节。二、编程步骤 1、启动VisualC++6.0,生成一个单文档的应用程序TrayTest,取消文档视图支持; 2、在CMainFrame类中添加自定义消息#defineWM_
此文档下载收益归作者所有