PB中用Windows API制作位图菜单

许多优秀的软件在窗口菜单的左边显示一个小图片,例如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

时间: 2024-08-26 22:55:12

PB中用Windows API制作位图菜单的相关文章

c#中用windows api函数修改内存数据

这个问题来自伴水的<划拳机器人>,对本文用途感兴趣的朋友请大致阅读伴水的帖子,在帖子中我用这个方法写了剪刀五号,战绩不错,当然属于作弊的方法了. 剪刀五号的思路就是每次出拳,尽量让对方能赢,然后根据一个地址段来扫描内存中对方所赢的局数的保存地址,找到后在得到比赛结果时把内存数据改掉.这个类似以前打单机游戏时用的fpe之类的修改工具.当然,如果对方故意犯规,一局也不赢,你是找不到他的地址的,这样可以通过正常途径来获取胜利. 把剪刀五号核心代码简化后,主要为三个api函数 OpenProcess,

java windows api-通过Windows API获取不到java程序的子窗体和界面控件

问题描述 通过Windows API获取不到java程序的子窗体和界面控件 有一个java写的桌面应用程序,我想用C#自动控制这个程序. 我在C#中用Windows API的FindWindow可以找到它的主窗体句柄,但是用FindWindowEx和EnumChildWindows无法找到它的子窗体和控件. 解决方案 java写的程序就不要指望了,swing之类的库,界面都是画上去的,不是windows窗口. 解决方案二: 1.确定控件(子窗口)存在,如果是画上去的没有子窗口. 2.用spy++

位图菜单的制作

菜单 *******************************************************实用环境:pb6.5\pb70\pb80\pb90功    能:位图菜单的制作方    法:如下*******************************************************第一步,首先要建立一个menu对象,命名为:m_bitmap.设计格式有一个主菜单 File,下面有4个子菜单new\open ave\exit,如下: ----File----

web 前端-html中用无序列表制作菜单,最小化网页出现的问题

问题描述 html中用无序列表制作菜单,最小化网页出现的问题 我使用无序列表做的网页菜单.为什么最大化时好好的,当我收缩的时候,列表就乱了.请大神回答下.谢谢,新手想不出来,有图: 代码如下: @charset "utf-8"; /* CSS Document */ #whole{ text-align:center;} #head{ background-color:#000; height:536px; } #titlebar{ background-color:#000; hei

C#+Windows API操纵系统菜单

window|菜单 一.前言 本文针对C#.NET中没有提供直接的类似SystemMenu的属性或类似GetSystemMenu的成员函数的情况,通过调用Windows API设计了一个C#类SystemMenu,从而实现了传统的对于系统菜单的操作. 二.系统菜单简介 当你单击窗口图标或右击窗口标题栏时系统菜单即弹出.它包含当前窗口的默认行为.不同窗口的系统菜单看起来有些不同,如一个正常窗口的系统菜单看起来与一个工具栏子对话框窗口的菜单就不一样. 修改系统菜单的好处: ·添加应用程序自己定义的菜

在python中用ctypes模块调用Windows API的问题

问题描述 在python中用ctypes模块调用Windows API的问题 用python做一个windows平台的工具,纯python缺乏接口,因此想用ctypes模块调用Windows API来实现,碰到了下列问题: 用python封装Windows 中的SystemTimeToFileTime,调用过程中提示参数不对. Windows API 原型 BOOL WINAPI SystemTimeToFileTime( __in const SYSTEMTIME* lpSystemTime,

Windows API 函数列表 附帮助手册

原文:Windows API 函数列表 附帮助手册 所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了.   帮助手册:700多个Windows API的函数手册 免费下载   API之网络函数 API之消息函数 API之文件处理函数 API之打印函数 API之文本和字体函数 API之菜单函数 API之位图.图标和光栅运算函数 API之绘图函数 API之设备场景函数 API之硬件与系统函数 API之进程和线程函数 API之控件与消息函数     1. API

Windows API函数大全(完整)_其它相关

1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconne

bootstrap-关于jquery制作折叠菜单的问题

问题描述 关于jquery制作折叠菜单的问题 highcharts的官网的折叠菜单模块,打开关闭列表影响底部模块,好像使用了bootstrap,请教其中原理! http://www.highcharts.com 解决方案 这是我项目中控制菜单: html: 系统管理 菜单管理查询 权限管理 角色管理 角色配置权限管理 用户及权限配置新增 用户及权限配置查看 解决方案二: 楼上 肯定不是用css控制 css做出来的没有动画效果 体验很差 我来说说我的思路 如果不借助任何插件的话 我会选用jquer