PB中用Windows API制作位图菜单 - 面向对象网,数据库,Powderbuilder,学习,对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > 数据库 > PowerBuilder > 正文

PB中用Windows API制作位图菜单

来源: www.bianceng.cn 阅读:

许多优秀的软件在窗口菜单的左边显示一个小图片,例如Word,这种菜单图文并茂,使操作者感到非常直观。而对于PowerBuilder来说,它为应用开发了几百个简单实用地函数,对于一般的开发应用已经足够,并不需要扩展函数。然而,我们经常希望为最终用户提供一些PowerBuilder并不能提供的功能,例如这种位图菜单,这时我们就需要外部函数。

外部函数是用其他语言编写的并且存储在动态链接库(DLL)中的函数。一个DLL就是一个包含可以执行的Windows代码的文件。DLL在运行时被动态地装入和链接,并且可被多个应用程序共享。DLL在内存中可以被移动或者固定,可预装入或者命令装入,也可以删除或者永久装入。开发者在使用外部函数之前,必须先对其进行定义,外部函数根据作用域的不同而分为两种类型:全局外部函数与局部外部函数。在PowerBuilder中定义外部函数的语法相当简单,定义函数时根据有无返回值分别使用两种关键字:FUNCTION(函数)和SUBROUTINE(子程序)。

在PowerBuilder中,我们也可以通过Windows API函数来实现此项功能,利用Windows API函数能够实现许多PowerBuilder不能实现的功能。

下面通过一个实例来叙述如何通过Windows API函数实现位图菜单。在本实例中,假设在创建一个应用对象Application之后,再分别创建一个菜单对象m_main和窗口对象w_main。在菜单对象m_main中有如下菜单项:File/New、File/Open、File/Save、File/Exit、Edit/Copy、Edit/Cut、Edit/Paste和Edit/Delete。在窗口对象w_main中,将其"Title"属性设置为"位图菜单",并且将菜单"w_main"关连到窗口"w_main"上。

1)首先为窗口w_main声明局部外部函数

FUNCTION ulong LoadImageA(ulong hintance, string filename,uint utype, int x,int y,uint fload) & LIBRARY "USER32.DLL"

//该函数实现装入图象数据的功能

FUNCTION boolean SetMenuItemBitmaps(ulong hmenu,uint upos,uint flags,&

ulong handle_bm1,ulong handle_bm2) LIBRARY "USER32.DLL"

//该函数设置菜单位图

FUNCTION int GetSystemMetrics( int nIndex ) LIBRARY "USER32.DLL"

//该函数获取菜单的位图尺寸

FUNCTION ulong GetMenuItemID(ulong hMenu,uint uItem) LIBRARY "USER32.DLL"

//该函数获取菜单项目的ID号

FUNCTION int GetSubMenu (ulong hMenu,int pos) LIBRARY "USER32.DLL"

//该函数获取子菜单项的句柄

FUNCTION ulong GetMenu(ulong hWindow) LIBRARY "USER32.DLL"

//该函数获取应用的菜单项

FUNCTION boolean ModifyMenu(ulong hMnu, ulong uPosition, ulong uFlags, &

ulong uIDNewItem, long lpNewI) alias for ModifyMenuA LIBRARY "USER32.DLL"

//该函数用来更新菜单项

2)其次为窗口w_main声明实例变量

//Win32常量

CONSTANT Integer IMAGE_BITMAP = 0

CONSTANT Integer LR_LOADFROMFILE = 16

CONSTANT Integer SM_CXMENUCHECK = 71

CONSTANT Integer SM_CYMENUCHECK = 72

CONSTANT Integer MF_BITMAP = 4

CONSTANT Integer MF_BYPOSITION = 1024

Tags:
相关文章列表: