visualfoxpr中实现系统托盘和响应

2016-07-09 09:11魏永辉
数字技术与应用 2016年6期

魏永辉

摘要:Visual foxpro是微软公司开发的一款数据库开发设计语言,用它来开发数据库既方便又快捷,Visual FoxPro的前身是FoxBase,是在DOS操作系统下运行的一款数据库开发程序,本文结合操作系统把程序调用到系统托盘的具体实现方法进行分析研究。

关键词:Visual foxpro 系统托盘

中图分类号:TP311.1 文献标识码:A 文章编号:1007-9416(2016)06-0182-01

1 应图标调用

随着操作系统的发展,特别进入Windows NT架构之后,数据库的开发更是丰富多彩起来,本文中,笔者对通过多年来的教学和实践,由于能力有限,仅对在 Visual foxpro中的开发中如何使开发完的程序,最小化到系统右下角的托盘图标和图标的响应加以分析和解释说明,望对读者有所帮助。当我我们在开发一个程序或者开发完一个程序,都希望它能够最小化到系统托盘图标,那么在Visual foxpro中这个程序需要定义和调用

2 一些原始的库函数文件大致如下

Clear

#Define WM_LBUTTONDBLCLK515

这个属性其实主要是在WIN32中的API的SetWindowsHookEx中作为参数来截获MOUSE的信息.微软WINDOWS窗口消息.表示左键双击事件.该消息可由Win32底层函数PeekMessage和GetMessage取得.#Define WM_RBUTTONUP517

鼠标右键弹起

#Define WM_MOUSEMOVE512

定义鼠标滑过时候

#Define NIM_ADD0

鼠标滑过调用气泡提示

#Define NIM_MODIFY1

窗口句柄修改

#Define NIM_DELETE2删除

#Define NIF_MESSAGE1 消息

#Define NIF_ICON2显示图标图片

#Define NIF_TIP4 显示提示内容

3 指定外部共享库名

其中包含用 FunctionName 指定的函数。如果为 LibraryName 指定 WIN32API,则 Visual FoxPro 在Kernel32.dll, Gdi32.dll,User32.dll, Mpr.dll, 和 Advapi32.dll 中搜索 32-位 Windows .dll 函数

Declare integer GetActiveWindow in user32

Declare integer LoadImage in user32 integer, String, integer, integer, integer, integer

Declare integer ExtractIcon in shell32 integer, String, integer

Declare integer Shell_NotifyIcon in shell32 integer, String @

4 定义自己的函数

那么下面我们就开始定义我们自己的应用程序和调用我们的应用程序了,下面是一个实际的例子,可以嵌套自己的应用程序

cbSize = 88

HWnd= GetActiveWindow()

uID= 1

uFlags = NIF_MESSAGE + NIF_ICON + NIF_TIP

uCallbackMessage=WM_MOUSEMOVE

hicon=LoadImage(0, “Winupd.ico”, 1, 16, 16, 16) && 可以替换图标文件

hicon = ExtractIcon(1, “自定义.exe”, 0) && 可以从你自己的exe文件中提取图标

szTip = padr(“自定义托盘”,64,chr(0))&& 工具提示,控制在 64 个字符内

NotifyIconData = NumToDWORD(cbSize) ;

+ NumToDWORD(hWnd) ;

+ chr(uID) + Chr(0) + Chr(0) + Chr(0) ;

+ NumToDWORD(uFlags) ;

+ NumToDWORD(uCallbackMessage) ;

+ NumToDWORD(hIcon) ;

+ szTip

lndel = Shell_NotifyIcon(NIM_DELETE, @NotifyIconData)&&去掉图标,返回 1 成功

If lndel#1

lnadd = Shell_NotifyIcon(NIM_ADD, @NotifyIconData) &&添加图标,返回 1 成功

Endif

Clear Dlls

Return

5 函数的返回

Function NumToDWORD

Lparameter Num

Declare integer RtlMoveMemory in WIN32API as RtlCopyLong string @pDestString, integer @pVoidSource, integer nLength

oLong = SPACE(4)

= RtlCopyLong(@oLong, Bitor(Num,0), 4)

Return oLong

Endfunc

6 结语

此段程序经过笔者调试,在WINDOWS NT架构下是可以稳定调用到系统右下角的托盘图标的,并且可以实现右键菜单的调用和退出,并且在日常应用中有很多实用的应用,由于笔者能力有限,还请批评指正。

参考文献

[1]俞俊军.VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中[J].电脑编程技巧与维护,2000(07):44-47.

[2]蒋祥刚.在DELPHI中实现系统托盘图标[J].中文信息,2002(07):55-57.