2024年4月1日发(作者:)
本栏目责任编辑
:
闻翔军
数据库及信息管理
使用
PowerBuilder
编写系统托盘程序
周伟
,
王丰
(
九江学院信息技术中心
,
江西九江
332005
)
摘要
:
在
PowerBuilder
中应用
Win32API
函数编写系统托盘程序
,
将
PowerBuilder
应用程序最小化到系统托盘上
,
显示为它的图标
,
适用于暂时不使用或者暂时后台运行的情况
。
关键词
:
PowerBuilder
;
系统托盘
;
Win32API
中图分类号
:
TP311
文献标识码
:
A
文章编号
:
1009-3044(2007)10-20927-02
ProgrammingSystemTrayinPowerBuilder
ZHOUWei,WANGFeng
(InformationTechnologyCenter,JiujiangUniversity,JiuJiang332005,China)
Abstract:ProgrammingSystemTrayinPowerBuilderusingWin32APIfunction,minimizingthePowerBuilderapplicationtothesystem
trayanddisplayingasitsicon,whichisusefulforrunningtemporarilyorrunningtemporarilyinthebackground.
Keywords:PowerBuilder;SystemTray;Win32API
1
引言
使用
Windows
操作系统的用户都知道任务栏和系统托盘
,
它
们位于桌面的正下方
,
其中依次是开始菜单
、
快速启动栏
、
任务
栏
、
系统托盘
。
任务栏中显示的是用户正在使用的程序
、
文件
,
而
系统托盘的目的就是将暂时不使用或者暂时后台运行的程序最
小化到系统托盘上
,
显示为它的图标
,
从而节省计算机资源
,
并且
可以使得桌面
、
任务栏更加地简洁
,
在需要使用或者前台运行时
,
用鼠标左键双击在系统托盘上对应的图标
,
转换为当前使用或者
前台运行
。
就像我们常用的聊天工具
QQ
一样
,
当我们登录后
,
显示主面
板
,
当用鼠标左键单击上面的隐藏按钮
,
它将最小化到系统托盘
上
,
显示为企鹅图标
,
当用鼠标双击该图标
,
又显示主面板
。
图
2
正常情况下的应用程序的主窗口
2
设计
PowerBuilder
实现系统托盘功能需要应用
Win32API
函数
,
获
取应用程序对应的可执行文件的路径
GetModuleFileNameA
;
提取
删除
该可执行文件的图标的句柄
ExtractIconA
;
在系统托盘上添加
、
该图标
Shell_NotifyIconA
;
打开该图标对应的应用程序窗口
OpenI-
con
;
销毁该图标
DestroyIcon
。
并且由于
Win32API
函数不是
PowerBuilder
的内部函数
,
所以在使用它们之前必须加以外部声明
。
根据实现系统托盘功能的特点
,
可将其分成
4
个阶段
,
各自
控制应用程序窗口的显示
,
在
open
事件向系统托盘添加应用程
序窗口对应的图标
;
在
resize
事件定义窗口最小化时即当
sizetype
参数为
1
时
,
隐藏应用程序窗口
,
只显示图标
;
在
pbm_custom01
事件定义鼠标左键双击图标的响应
,
当
lparam
参数为
WM_LBUTTONDBLCLK
时
,
恢复应用程序窗口的显示
;
在
close
事
件从系统托盘删除应用程序窗口对应的图标
。
下图
(
图
1
)
是按照
事件发生先后定义的事件流程图
。
这样我们在暂时不使用应用程序或者暂时后台运行应用程
序时
,
就可以可以隐藏其主窗口
,
在需要使用或者前台运行时
,
再
显示其主窗口
。
图
3
系统托盘上应用程序的主窗口对应的图标
3
实现
实例常量
、
3.1
声明本地外部函数
、
NotifyIconData
结构
;
定义
实例变量
图
1
按照事件发生先后定义的事件流程图
系统托盘达到的效果是如右图所示
,
其中右上图
(
图
2
)
是应
用程序的主窗口
,
它实现了很多的功能
,
是用户操作的界面
;
其中
右下图
(
图
3
)
是在窗口打开时
,
自动向系统托盘添加的窗口对应
的图标
,
当移动鼠标到该图标上
,
会出现提示
“
系统托盘程序
”。
当用鼠标左键单击窗口的最小化按钮
,
窗口将被隐藏
,
只显示托
盘上的图标
;
当用鼠标双击该图标
,
又显示该窗口
。
3.1.1
本地外部函数
functionlongGetModuleFileName(longhModule,refstringlp-
Filename,longnSize)library"kernel32"aliasfor"GetModuleFile-
NameA"
functionlongExtractIcon(longhInst,stringlpszExeFileName,long
nIconIndex)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
年
。
927
数据库及信息管理
constantlongWM_LBUTTONDBLCLK=515//
鼠标左键双击
消息
本栏目责任编辑
:
闻翔军
i_nid.hIcon=i_hIcon//
图标的句柄
i_nid.szTip="
系统托盘程序
"+char(0)//
以
char(0)
结尾的提
示字符串
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)//
获取应用程序对应
的可执行文件的路径
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
中运行通过
。
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//
用户自定义消息
参考文献
:
[1]
马贵安
,
李明武
,
牛永生
,
等编著
.PowerBuilderWin32API
程
序设计
(
高级卷
)
[M].
清华大学出版社
,
2004.
[2]CharlesPetzold,
著
,
北京博彦科技发展有限公司
,
译
.Win-
dows
程序设计
(
第
5
版
)
[M].
北京大学出版社
,
2004.
的数据
,
使客户可以实时地在
IBM
(
DB2
,
还包括
IBMInformix
)
与
SQLServer
、
Oracle
、
Sybase
和
Teradata
(
只作为目标
)
数据库之间
复制数据
。
从而能够满足我们的业务需求
。
[4]
异构服务
(
heterogeneousser-(2)Oracle8i
数据库软件提供的
“
。
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
购买相关的透明网关程序
。
(
上接第
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
信息集成功能
实现异构数据库的访问
。
参考文献
:
[1]
周英飙
,
许蔚
.
异构数据库体系结构
[M]
,
2005.
[2]
黄镝
.
异构数据库的跨库检索技术综述
[M].
图书情报工作
,
2003
,(
6
)
.
[3]
刘允杰
.
在
Oracle
数据库中连接异种数据源
[M],2005.
[4]KulvirSinghBhogal,IBMSoftwareServicesforWebSphere,
Austin,TX&SridharReddyVarakala,
研究生
,
UniversityofTexasatAr-
lington.
和
Oracle9i
一起使用
DB2InformationIntegrator
简介
,2003.
DB2InformationIntegrator
是
IBM
公司用于信息整合的软件
系统
,
该系统提供联合数据查询功能
,
允许客户对
DB2
和其它关
系和非关系数据库中客户最新数据的直接访问
,
为多个来自不同
供应商的异构数据库提供单一的应用程序接口
。
DB2InformationIntegrator
通过一个用于混合关系数据库
的联邦数据服务器
,
将异构数据库包装为
DB2
联邦数据库对象
,
使用一个视图
,
使我们能够实时合并来自
DB2
和其它数据库表
928
电脑知识与技术


发布评论