已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品论文,值得推荐应用程序指示图标的实现方法研究 摘要:本文较详细地介绍了Windows环境下的应用程序指示图标的基本原理及其实现方法,并给出了通过Delphi编程环境实现的应用程序指示图标的实例. 关键词:指示图标 Delphi 1引言 在早期的DOS操作系统中,存在着一类特殊的程序内存驻留程序(TSR),这类程序始终驻留在内存中,当需要使用时就直接从内存中调用,大大提高了时间效率,而这类程序一般的也是系统需要频繁调用的程序或是一个实时监控程序,因此通过驻留内存来换取时间效率是值得的. 在Windows环境下也需要这一类程序,一些是系统程序如输入法和系统时钟,一些是应用程序如一些实时监控的杀毒软件等,这些程序通常都是一直伴随着系统运行的,它们在运行时一般不需要或很少需要用户的干预, 而Windows环境下的应用程序在运行时通常都是以窗口形式存在的,即使最小化也会在任务栏上留下一个带图标及标题的按钮,又由于Windows是多任务操作系统,用户几乎肯定会同时进行其他操作,因此象上述应用程序若不采取其他措施就必然会影响到用户的其他操作或者是程序自身容易受到意外的用户干预,影响了正常运行. 可喜的是,从Windows 95 和 Windows NT 4.0开始,出现了一个令人振奋的特性:任务栏指示区.这个通常位于任务条右端的区域能包含一种称作指示图标(NotifyIcon)的小图标(如输入法图标、系统时钟图标等),通过这些图标能够引出复杂的应用程序或菜单,而具有了这种图标的应用程序也就不存在上面所讲的问题了.本文将介绍Windows环境下应用程序指示图标的基本原理及其实现方法,并给出通过Delphi编程环境实现的应用程序指示图标的实例. 2基本原理 要实现应用程序指示图标,首先需要创建一个应用程序窗口,再注册一个图标到任务栏,并设置它的消息循环(使图标与某个应用程序窗口关联),最后还应在程序退出时关闭该指示图标,这就是整个应用程序指示图标实现过程的基本步骤,当然还有很多具体的细节上的工作.下面就介绍一些比较关键的基本原理及技术细节. 在Windows系统中存在这样一个基本的数据结构: TNotifyIconData,它是一个用来设置窗口句柄的数据结构,是一个记录类型的参数,其具体结构如下: Type TNotifyIconData = record cbSize: DWORD; hWnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array 0.63 of AnsiChar; end; 要实现指示图标首先就需要设置这个图标的窗口句柄(这将定义哪个窗口处理消息循环),回调消息号,图标,工具提示等,这也是所有工作的关键.一旦这个数据结构设置了,我们就可以增加一个图标到任务栏上的指示区了,同时将该图标与一个窗口(应用程序)关联了起来. 下面就简要介绍上述数据结构中的各个成员: cbSize是该结构的大小(由系统用来确定版本); hWnd是一个窗口句柄,用来指示Icon向该窗口发送消息,即将Icon与该窗口关联了起来; uID是图标标识符,仅当程序有多个图标时才有用, 它是用于区分各个图标的; uFlags有三个可能的标志: nif_Message、nif_Icon及nif_Tip.它是用来说明该结构的hIcon、uCallbackMessage和szTip这三个成员中哪一个或哪几个的设置值有效; uCallbackMessage是应用程序定义的一个消息标识符(通常是使用系统消息作为回调消息,因此一般用系统消息标识符即可),系统通过该消息标识符来将用户对指示图标的操作消息发送到由hWnd定义的窗口,通过该标识符的LPARAM参数可判断是何种操作从而进行相应处理; hIcon是要在指示区内新增、删除或修改的Icon图标的句柄; szTip是当用户将鼠标移到任务栏中的指示图标上时,所显示出的提示文本. 在声明了上述的数据结构类型变量并对其各个分量进行了设置后,就可以向系统注册该指示图标了.指示图标的注册是通过调用Shell_NotifyIcon这个API函数来实现的,该API函数的语法声明如下: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, / message identifier PNOTIFYICONDATA pnid / pointer to structure ); 该函数的功能就是向系统发送一条消息用以在任务栏指示区新增、修改或删除一个图标.其中的参数dwMessage是一个消息标识符,用来标识向系统发送的消息类型,这个参数有三种取值:NIM_ADD、NIM_DELETE和NIM_MODIFY,它们分别表示向指示区新增、删除、修改一个图标.参数pnid 是一个指向TNotifyIconData结构的指针,通过该参数使所发送的消息与一个具体的应用程序指示图标关联起来,实现对该图标的新增、修改、删除.这样就可以在应用程序启动时进行新增指示图标的操作,在退出应用程序时删除指示区的相应指示图标. 当然在应用程序窗口中还得有一个消息处理程序用来处理由Shell_NotifyIcon函数发回的消息,也就是应用程序应能响应用户对指示图标的鼠标操作.另外,为了真正解决在本文引言中提到的问题,应用程序窗口还应根据需要在运行时实现隐藏,而只有通过对指示图标操作才能使其再现,最小化时又可隐藏,这可以通过调用API函数ShowWindow来实现,通过对其指定不同的参数来实现窗口的隐藏和再现, 在Delphi中要实现程序启动时窗口的不可见,可以在程序的窗体创建程序里设置Application的ShowMainForm属性为False即可. 3应用实例: 下面介绍本人开发的一个IC卡考勤系统中应用程序指示图标的实现作为上述实现方法的一个实例并给出了部分源代码.由于IC卡读卡机功能上存在一些不足,在读卡时不能自己发送”中断”信号到微机,因此微机需要对读卡机进行实时监控,通过检测得知IC读卡机中是否有卡并决定是否进行读卡或其他操作,所以在该系统中采用了应用程序指示图标的技术,并取得了较好的效果. 首先为了使用API函数Shell_NotifyIcon及结构TNotifyIconData,必须在程序的USES语句中添加声明ShellApi单元,然后需要向窗体类的元素中添加一个TnotifyIconData结构,如下: private nid: TnotifyIconData; 在窗体的创建程序中设置该结构的各个成员值: nid.cbsize := sizeof(nid); nid.wnd := Handle; /当前窗体的句柄 nid.uID := 1; nid.uCallBackMessage := wm_rbuttondown; nid.hIcon := LoadIcon(hInstance,KQ); nid.szTip := HS考勤系统; nid.uFlags := nif_Message or nif_Icon or nif_Tip; 其中函数LoadIcon()用于装载一个图标资源, 参数hInstance为应用程序句柄,第二个参数串值用于指定图标文件名或是图标资源标识符. 再调用API函数Shell_NotifyIcon向任务栏指示区添加一个图标: Shell_NotifyIcon(NIM_ADD,nid); 并且设置应用程序的ShowMainForm属性为False使得应用程序窗体在启动时即不可见: Application.ShowMainForm := False; 为了使应用程序能够对用户在指示图标上的操作有所响应,需要在应用程序窗体中建立一个消息处理函数IconTray.首先是向窗体类的元素中添加一个该过程声明: public Public declarations procedure IconTray(var Msg:TMessage); m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国建设银行总行直属机构校园招聘备考题库附答案详解(培优)
- 2025大连银行信息科技部招聘5人备考题库有完整答案详解
- 中国银联2026年度校园招聘备考题库及一套参考答案详解
- 2026年度中国工商银行江苏省分行校园招聘1000人备考题库及答案详解(真题汇编)
- 2025广东深圳市光明区光明街道办事处第一批一般特聘专干招聘2人备考题库完整答案详解
- 个性化睡眠健康管理干预方案设计
- 个性化方案的知情同意分层管理方案
- 2025年杭州市西湖区灵隐街道公开招聘6名编外工作人员备考题库附答案详解(模拟题)
- 2025浙江宁波春晓街道公开招聘编外人员2人备考题库含答案详解(研优卷)
- 2025河北秦皇岛县(区)总工会招聘工会社工工作人员16人备考题库附答案详解(满分必刷)
- 工程竣工验收告知单
- 项目合作协议-非框架协议版
- 橡胶的加工工艺课件
- DCC网销能力提升培训
- 神经病理性疼痛诊疗专家共识解读
- 广告制作常用材料专题培训课件
- 《我是运动小健将》课件
- 网约车平台服务合作协议范本
- 170位真实有效投资人邮箱
- 家禽屠宰建设项目可行性研究报告
- 上交所董秘考试题库及答案【全部】
评论
0/150
提交评论