数据库及信息管理
本栏目责任编辑:闻翔军
1引言
使用Windows操作系统的用户都知道任务栏和系统托盘,它们位于桌面的正下方,其中依次是开始菜单、快速启动栏、任务栏、系统托盘。任务栏中显示的是用户正在使用的程序、文件,而系统托盘的目的就是将暂时不使用或者暂时后台运行的程序最小化到系统托盘上,显示为它的图标,从而节省计算机资源,并且可以使得桌面、任务栏更加地简洁,在需要使用或者前台运行时,用鼠标左键双击在系统托盘上对应的图标,转换为当前使用或者前台运行。
就像我们常用的聊天工具QQ一样,当我们登录后,显示主面板,当用鼠标左键单击上面的隐藏按钮,它
将最小化到系统托盘上,显示为企鹅图标,当用鼠标双击该图标,又显示主面板。
2设计
PowerBuilder实现系统托盘功能需要应用Win32API函数,获取应用程序对应的可执行文件的路径GetModuleFileNameA;提取
该可执行文件的图标的句柄ExtractIconA;在系统托盘上添加、
删除该图标Shell_NotifyIconA;打开该图标对应的应用程序窗口OpenI-con;销毁该图标DestroyIcon。并且由于Win32API函数不是PowerBuilder的内部函数,所以在使用它们之前必须加以外部声明。
根据实现系统托盘功能的特点,可将其分成4个阶段,各自控制应用程序窗口的显示,在open事件向系统托盘添加应用程序窗口对应的图标;在resize事件定义窗口最小化时即当sizetype参数为1时,隐藏应用程序窗口,只显示图标;在pbm_custom01事件定义鼠标左键双击图标的响应,当lparam参数为WM_LBUTTONDBLCLK时,恢复应用程序窗口的显示;
在close事件从系统托盘删除应用程序窗口对应的图标。下图(图1)是按照
事件发生先后定义的事件流程图。
图1按照事件发生先后定义的事件流程图
系统托盘达到的效果是如右图所示,其中右上图(图2)是应
用程序的主窗口,它实现了很多的功能,是用户操作的界面;其中右下图(图3)是在窗口打开时,自动向系统托盘添加的窗口对应的图标,当移动鼠标到该图标上,会出现提示“系统托盘程序”。当用鼠标左键单击窗口的最小化按钮,窗口将被隐藏,只显示托盘上的图标;当用鼠标双击该图标,又显示该窗口。
图2正常情况下的应用程序的主窗口
这样我们在暂时不使用应用程序或者暂时后台运行应用程序时,就可以可以隐藏其主窗口,在需要使用或者前台运行时,再显示其主窗口。
图3系统托盘上应用程序的主窗口对应的图标
3实现
3.1声明本地外部函数、实例常量、NotifyIconData结构;定义实例变量
3.1.1本地外部函数
functionlongGetModuleFileName(longhModule,refstringlp-Filename,longnSize)library"kernel32"aliasfor"GetModuleFile-NameA"
functionlongExtractIcon(longhInst,stringlpszExeFileName,longnIconIndex)library"shell32"aliasfor"ExtractIconA"
functionintegerShell_NotifyIcon(longdwMessage,anylpData)library"shell32"aliasfor"Shell_NotifyIconA"
functionlongSetForegroundWindow(longhwnd)library"user32"functionlongOpenIcon(longhwnd)library"user32"functionlongDestroyIcon(longhIcon)library"user32"3.1.2实例常量
constantlongNIM_ADD=0//向系统托盘添加该图标constantlongNIM_DELETE=2//从系统托盘删除该图标
constantlongNIF_MESSAGEorNIF_ICONorNIF_TIP=7//接收
消息、显示图标和提示
constantlongWM_NULL=0//空消息
收稿日期:2007-03-23
作者简介:周伟(1981-),男,助教,毕业于山东大学计算机科学与技术专业,在职研究生就读,从事软件研发4年;王丰(1980-),男,助教,毕业于空军雷达学院计算机应用专业,在职研究生就读,从事网络工程、软件研发6年。
使用PowerBuilder编写系统托盘程序
周伟,王丰
(九江学院信息技术中心,江西九江332005)
摘要:在PowerBuilder中应用Win32API函数编写系统托盘程序,将PowerBuilder应用程序最小化到系统托盘上,显示为它的图标,适用于暂时不使用或者暂时后台运行的情况。
关键词:PowerBuilder;系统托盘;Win32API中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)10-20927-02
ProgrammingSystemTrayinPowerBuilder
ZHOUWei,WANGFeng
(InformationTechnologyCenter,JiujiangUniversity,JiuJiang332005,China)
Abstract:ProgrammingSystemTrayinPowerBuilderusingWin32APIfunction,minimizingthePowerBuilderapplicationtothesystemtrayanddisplayingasitsicon,whichisusefulforrunningtemporarilyorrunningtemporarilyinthebackground.
Keywords:PowerBuilder;System
Tray;
Win32API
927
数据库及信息管理本栏目责任编辑:闻翔军
(上接第917页)
工具。在结构关系上,ASP是通过ODBC与数据库打交道。因此,可向上层兼容各类数据。
另一种相似的动态网页技术JSP由Sun公司于1999年发布,JSP支持的是完全的Java,可以充分发挥Java面向对象编程的强大功能,可以使用J2EE标准服务,使用大量的JavaAPI,如JDBCAPI。
(5)XML(ExtensibleMarkupLanguage)技术
XML(可扩展标记语言)是由W3C(WorldWideWebConsor-tium)组织于1998年2月制定的一种通用语言规范,它是专门为Web应用程序而设计的SGML的简化子集。XML最大的优点在于它的数据描述和传送能力,具备很强的开放性。目前网上有很多信息格式是半结构化或非结构化的,其来源极端异构。利用XML作为中间件对这些信息进行元数据搜索,提供一个统一界面的检索系统是一个较好的应用方案。为了使基于XML的数据交换成为可能,必须实现数据库的XML数据存取,并且将XML数据同应用程序集成,进而使之同现有的规则和技术相结合。开发基于XML动态应用(如动态信息发布、动态数据交换等)的前提是所支持的数据库必须能支持XML。XML提供描述不同类型数据的标准格式,例如:数据库记录、图形、声音等,并且可一致而正确地解码、管理和显示信息。
3几种数据库系统提供的异构数据库访问产品
(1)利用IBM公司的DB2InformationIntegrator信息集成功能实现异构
数据库的访问。
DB2InformationIntegrator是IBM公司用于信息整合的软件系统,该系统提供联合数据查询功能,允许客户对DB2和其它关系和非关系数据库中客户最新数据的直接访问,为多个来自不同供应商的异构数据库提供单一的应用程序接口。shell程序的编写流程
DB2InformationIntegrator通过一个用于混合关系数据库的联邦数据服务器,将异构数据库包装为DB2联邦数据库对象,使用一个视图,使我们能够实时合并来自DB2和其它数据库表的数据,使客户可以实时地在IBM(DB2,还包括IBMInformix)与SQLServer、Oracle、Sybase和Teradata(只作为目标)数据库之间复制数据。从而能够满足我们的业务需求。[4]
(2)Oracle8i数据库软件提供的“异构服务(heterogeneousser-vices)”。
“异构服务”是集成在Oracle8i数据库软件中的功能,它提供了从Oracle数据库访问其他非Oracle数据库的通用技术。Or-acle数据库提供通过建立DBLink的方法访问非本地数据库,而“异构服务”提供通过建立DBLink使你能够执行OracleSQL查询,透明地访问其他非Oracle数据库里的数据,就像访问Oracle远程数据库一样。“异构服务”分为两种:
a)事务处理服务(TransationService):通过事务处理服务,使用户在访问非Oracle数据库中支持事务处理功能。
b)SQL服务:通过SQL服务,使用户直接在Oracle数据库中执行对非Oracle数据库的各种SQL语句。
根据异构服务代理程序的不同,“异构服务”连接方式可以分为透明网关和通用连接两种:
a)透明网关(TransparentGateways)透明网关使用Oracle提供的特定网关程序来设置代理。
b)通用连接(GenericConnectivity)通用连接又分为ODBC连接和OLEDB连接两种,其连接方法和透明网关没有本质区别,只不过通用连接是和数据库一起提供的功能,你不需要向Oracle购买相关的透明网关程序。
参考文献:
[1]周英飙,许蔚.异构数据库体系结构[M],2005.
[2]黄镝.异构数据库的跨库检索技术综述[M].图书情报工作,2003,(6).
[3]刘允杰.在Oracle数据库中连接异种数据源[M],2005.
[4]KulvirSinghBhogal,IBMSoftwareServicesforWebSphere,Austin,TX&SridharReddyVarakala,研究生,UniversityofTexasatAr-lington.和Oracle9i一起使用DB2InformationIntegrator简介,2003.
constantlongWM_LBUTTONDBLCLK=515//鼠标左键双击消息
3.1.3NotifyIconData结构
longcbSize//NotifyIconData结构的长度
longhWnd//窗口的句柄
longuID//图标的ID值
longuFlags//参数标识
longuCallbackMessage//接收的Windows消息
longhIcon//图标的句柄
stringszTip//图标的提示
3.1.4定义实例变量
longi_hIcon//图标的句柄
NotifyIconDatai_nid//NotifyIconData结构变量
3.2定义窗口的open事件
stringfilename
longhandle
handle=handle(getapplication())//获取应用程序的句柄
GetModuleFileName(handle,filename,255)//获取应用程序对应的可执行文件的路径
i_hIcon=ExtractIcon(0,filename,0)//提取该可执行文件的图标的句柄
i_nid.cbSize=88//定义NotifyIconData结构的长度
i_nid.hWnd=handle(this)//当前窗口的句柄
i_nid.uID=0//图标的ID值
i_nid.uFlags=7//接收消息、显示图标和提示
i_nid.uCallbackMessage=WM_USER//用户自定义消息
i_nid.hIcon=i_hIcon//图标的句柄
i_nid.szTip="系统托盘程序"+char(0)//以char(0)结尾的提示字符串
Shell_NotifyIcon(NIM_ADD,i_nid)//向系统托盘添加图标
3.3定义窗口的resize事件
ifsizetype=1thenthis.hide()//隐藏当前窗口
3.4自定义窗口事件pbm_custom01
iflparam=WM_LBUTTONDBLCLKthen//如果鼠标左键双击图标
OpenIcon(handle(this))//恢复当前窗口原来的大小和位置
this.show()//显示当前窗口
SetForegroundWindow(handle(this))//将当前窗口放到前台运行endif
3.5定义窗口的close事件
i_nid.uCallbackMessage=WM_NULL//空消息
Shell_NotifyIcon(NIM_Delete,i_nid)//从系统托盘删除图标
DestroyIcon(i_hIcon)//销毁图标
i_hIcon=0
4结论
本文介绍了在PowerBuilder中如何应用Win32API函数编写系统托盘程序,以上提供的程序代码在PowerBuilder10中运行通过。
参考文献:
[1]马贵安,李明武,牛永生,等编著.PowerBuilderWin32API程序设计(高级卷)[M].清华大学出版社,2004.
[2]CharlesPetzold,著,北京博彦科技发展有限公司,译.Win-dows程序设计(第5版)[M].北京大学出版社,2004.
928
电脑知识与技术

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。