【PB】带位图的菜单项实现
来源:互联网 发布:win7双系统mac 编辑:程序博客网 时间:2024/04/27 18:32
当读者在使用 Microsoft Word 97 时,是否曾注意到 Word 的部分菜单项旁有一个小巧的图标 (如图1所示),初次见到时,是否有耳目一新的感觉,是否想过让 PowerBuilder 创建的菜单项和他一样漂亮。只可惜 Sybase 至今仍未实现该功能,令得广大的 PowerBuilder 用户只能去羡慕别人。不过文本将探讨如何用 PowerBuilder 和 Win32 API 来实现带位图的菜单项。
图1
相关的Win32 API函数
为了将位图与菜单项关联起来,必须调用 SetMenuItemBitmaps 函数。该函数可以改变 Checked 和 Unchecked 状态的图标,读者可以将缺省的勾号 (√) 改为开关或圆形按钮之类的更可爱的图标。我们要实现的带位图菜单项就靠该函数改变 Unchecked 状态图标。其 Powersoft 原型为:
Function Boolean SetMenuItemBitmaps(&
ULong hMenu, & /*子菜单的句柄*/
UINT uPosition, & /*菜单项在子菜单中的位置*/
UINT uFlags, & /*位置类型标志*/
ULong hBitmapUnchecked, & /*Unchecked状态对应的位图句柄*/
Ulong hBitmapChecked & /*Checked状态对应的位图句柄*/
) Library "User32.DLL"
uFlags 为 MF_BYCOMMAND(0) 时,uPosition 得是该菜单项的标识号;MF_BYPOSITION(1024) 时,uPosition 得是基于 0 的相对位置。
然而,在调用 SetMenuItemBitmaps 函数前,必须调用 GetMenu 和 GetSubMenu 获取子菜单的句柄。 GetMenu 函数用于获取主菜单的句柄,GetSubMenu 函数用于获取子菜单的句柄。两函数的 Powersoft 原型为:
Function ULong GetMenu(ULong hWnd /*窗口句柄*/ ) Library "User32.DLL"
Function ULong GetSubMenu(ULong hMenu /*主菜单句柄*/, int nPos /*相对位置*/) Library "User32.DLL"
在下面的例子中,还要用到 LoadImageA 和 DeleteObject 函数。LoadImageA 函数可从指定的地方加载位图,并返回位图的句柄。DeleteObject 函数删除与该位图相关的信息。他们的 Powersoft 原型为:
Function ULong LoadImageA(&
Ulong hinst, & /*应用程序实例句柄*/
String lpszName, & /*资源名*/
UInt uType, & /*资源类型*/
int cxDesired, & /*宽度*/
int cyDesired, & /*高度*/
UInt fuLoad & /*加载选项*/
) Library "User32.DLL"
Function Boolean DeleteObject(ULong hObject /*对象句柄*/ ) Library "GDI32.DLL"
实现举例
先在菜单对象 m_main 中声明一个实例变量:
定义对象函数 Init 用于加载和设置位图:
int i
int indexs[] = ...{0, 1, 2, 6}
ULong hMenu
String sBMPFiles[] = ...{".New.bmp", ".Open.bmp", ".Save.bmp", ".Print.bmp"}
hMenu = GetSubMenu(GetMenu(Handle(ParentWindow)), 0) //取子菜单句柄
For i = 1 To Upperbound(sBMPFiles)
//从文件加载位图(13x13 pixels)
hBitMaps[i] =LoadImageA(0, sBMPFiles[i], 0, 13, 13, 16)
SetMenuItemBitmaps(hMenu, indexs[i], 1024, hBitMaps[i], 0) //建立关联
Next
定义对象函数 Fin 用于资源回收:
int i
For i = 1 to Upperbound(hBitMaps)
DeleteObject(hBitMaps[i])
Next
读者可以在父窗口的 Open 事件脚本中调用 Init( ) 函数,在 Close 事件脚本中调用 Fin( ) 函数。
- 【PB】带位图的菜单项实现
- 【PB】带位图的菜单项实现
- PB调用windowsAPI给菜单项添加位图
- 位图菜单的制作
- 位图菜单的制作
- 位图菜单的制作
- PB右键弹出菜单实现
- PB中实现带工具栏的Popup窗口
- 带滑动菜单的Recyclerview实现
- PB如何实现动态建立菜单
- pb 简单实现OutLook菜单(未完成)
- PB如何实现动态建立菜单
- PB中实现菜单的动态生成(函数递归实现)
- pb多线程的实现
- 【PB登陆的实现】
- 【PB】使 PB 支持单选菜单项
- pb webfrom右键菜单的编程
- Pb菜单工具栏图标顺序的设置
- 编码规范
- 史上最强大开源WEB开发工具firebug横空出世!
- struts开发helloworld
- STL非修改算法
- 炫听空间--有声读物
- 【PB】带位图的菜单项实现
- 想成为嵌入式程序员应知道的0x10个基本问题
- Oracle & SQL 性能优化技巧
- 好像生孩子一样的感觉
- Windows API函数大全
- 开博客之初衷
- 2007年展望
- 程序代码注释的探讨[未完待续]
- 唐河游子论坛