1 / 12
文档名称:

系统托盘编程完指南.doc

格式:doc   大小:140KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

系统托盘编程完指南.doc

上传人:rita291961 2019/6/11 文件大小:140 KB

下载得到文件列表

系统托盘编程完指南.doc

相关文档

文档介绍

文档介绍:系统托盘编程完全指南一、下载本文例子源代码  自从Windows95面市以来,系统托盘应用作为一种极具吸引力的UI深受广大用户的喜爱。使用系统托盘UI的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。那么如何编写自己的托盘应用呢?本文是系列文章中的第一篇,这些文章将比较系统地描述托盘应用的编程。并创建自己的C++类来增强系统托盘应用的特性。读完这些文章,再参照例子,相信读者能轻松自如地在自己的程序中应用系统托盘。   大家知道,MFC框架没有提供任何现成的类应用于系统托盘UI,那么如何将表示应用程序的图标添加到任务栏中呢?方法很简单,只用到一个API函数,它就是Shell_NotifyIcon。这个函数本身也相当容易理解和使用。看看它的原型就知道了:BOOLShell_NotifyIcon(DWORDdwMessage,PNOTIFYICONDATApnid);第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:NIM_ADD:添加一个图标到任务栏。NIM_MODIFY:修改状态栏区域的图标。NIM_DELETE:删除状态栏区域的图标。NIM_SETFOCUS:将焦点返回到任务栏通知区域。当完成用户界面操作时,任务栏图标必须用此消息。例如,如果任务栏图标正显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。NIM_SETVERSION:指示任务栏按照相应的动态库版本工作。第二个参数pnid是NOTIFYICONDATA结构的地址,其内容视dwMessage的值而定。:typedefstruct_NOTIFYICONDATA{DWORDcbSize;//结构大小(sizeofstruct),必须设置HWNDhWnd;//发送通知消息的窗口句柄UINTuID;//图标ID(由回调函数的WPARAM指定)UINTuFlags;UINTuCallbackMessage;//消息被发送到此窗口过程HICONhIcon;//图标句柄CHARszTip[64];//提示文本}NOTIFYICONDATA;uFlags的值:#defineNIF_MESSAGE0x1//表示uCallbackMessage有效#defineNIF_ICON0x2//表示hIcon有效#defineNIF_TIP0x4//表示szTip有效有关Shell_NotifyIcon函数的详细使用细节请参考MSDN。   NOTIFYICONDATA结构中的hWnd是"拥有"图标的窗口句柄。uID可以是任何标示托盘图标的ID(如果有多个图标),一般使用资源ID。HIcon可以是任何图标的句柄,包括预定义的系统图标,如IDI_HAND、IDI_QUESTION、IDI_EXCLAMATION、或者Windows的徽标IDI_WINLOGO。   图标的显示并不难,关键是事件的处理。当用户将鼠标移到图标上或者在图标上单击鼠标时,为了得到通知消息,你可以将自己的消息ID赋给uCallbackMessage,并设置NIF_MESSAGE标志。当用户在图标上移动或单击鼠标时,Windows将用hWnd指定的窗口句柄调用你建立的窗口过程;消息ID在uCallbackMessage中指定,uID的值即为wParam,lParam为鼠标事件,如WM_LBUTTONDOWN等。   尽管Shell_NotifyIcon函数简单实用。但它毕竟是个Win32API,为此我将它封装在了一个C++类中,这个类叫做CTrayIcon,有了它,托盘编程会更加轻松自如,因为它隐藏了NOTIFYICONDATA、消息代码、标志以及所有那些你必须要看MSDN才能搞掂的繁琐细节。CTrayIcon的定义以及实现细节请下载源代码参考。CTrayIcon为程序员提供了一个更加友好的托盘编程接口,它除了对Shell_NotifyIcon函数进行打包之外,它还是一个迷你框架呢!之所以这么说,是因为按照Windows系统应用软件界面指南所提倡的原则(这个指南可以在MSDN中找到),这个类增强了托盘图标的用户界面行为。以下便是CTrayIcon最终实现的UI特性:1、托盘图标应该有信息提示,也就是ToolTips。2、单击右键应该弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令。3、单击左键应该显示进一步的信息或者控制图标所代表的对象,例如,当左键单击声音图标时进行音量控制。如果没有进一步的信息或控制,则不要有任何动作。   CTrayIcon对上面的特性进行了全面的封装。为了示范CTrayIcon的工作原理,本