《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > Authorware7中多级菜单的实现方法研究
Authorware7中多级菜单的实现方法研究
2014年微型机与应用第21期
范翠香
(西安理工大学,陕西 西安 710082)
摘要: 在各种多媒体作品中人机交互方式有时需要采用多级菜单方式。虽然Authorware7提供了下拉菜单的交互方式,但要实现二级以上的下拉菜单还需借助外部函数来实现。利用外部文件WINAPI.U32中的有关菜单操作函数,探讨并研究了Authorware7实现多级下拉菜单的制作方法,并给出了一个三级下拉菜单的实例制作过程。
Abstract:
Key words :

  摘 要: 在各种多媒体作品中人机交互方式有时需要采用多级菜单方式。虽然Authorware7提供了下拉菜单的交互方式,但要实现二级以上的下拉菜单还需借助外部函数来实现。利用外部文件WINAPI.U32中的有关菜单操作函数,探讨并研究了Authorware7实现多级下拉菜单的制作方法,并给出了一个三级下拉菜单的实例制作过程。

  关键词: Authorware;外部函数;菜单

0 引言

  在多媒体作品中有时希望用菜单方式与用户进行交互,由于需要进行功能分类,多级菜单的使用在多媒体作品中也常被用到。Authorware7中提供了菜单交互方式,但若想设计二级以上菜单则必须引用一些外部函数。实现有关菜单操作的外部函数包含在名为WINAPI.U32的外部文件中。本文研究了在Authorware中利用外部函数设计出多级菜单的实现方法,并给出一个实例设计过程,对设计过程中可能出现的异常情况提供了相关处理方法。

1 有关菜单操作的外部函数

  首先将外部文件WINAPI.U32复制到当前程序所在目录下。所涉及的外部函数有:

  ⑴GetMenu(HWND hWnd),该函数取得分配给指定窗口的菜单的句柄。这是最高级的菜单句柄。

  ⑵GetSubMenu(HMENU hMenu, int nPos),该函数取得被指定菜单激活的下拉式菜单或子菜单的句柄。其中 nPos的值为菜单或子菜单的索引值,从0开始。

  ⑶RemoveMenu(HMENU hMenu,UINT uPosition,UINT uFlags),该函数从指定菜单删除一个菜单项或分离一个子菜单。如果菜单项打开一个下拉式菜单或子菜单,RemoveMenu不销毁该菜单或其句柄,允许菜单被重用。其中当uFlags的值为0(MF_BYCOMMAND)时,表示uPosition给出菜单项的标识符。当uFlags的值为1 024(MF_BYPOSITION)时,表示uPosition给出菜单项基于零的相对位置。

  ⑷DrawMenuBar(HWND hWnd),该函数重画指定菜单的菜单条。如果系统创建窗口以后菜单条被修改,则必须调用此函数来重画修改了的菜单条。

  ⑸InsertMenu(HMENU hMenu, UINT uPosition,UINT uFlags,UINT uIDNewItem,LPCSTR lpNewItem),该函数插入一个新菜单项到菜单里,并使菜单里其他菜单项下移。

  ⑹DeleteMenu( HMENU hMenu,UINT uPosition,UINT uFlags),该函数从指定菜单里删除一个菜单项。如果此菜单项打开了一个菜单或子菜单,则此函数销毁该菜单或子菜单的句柄,并释放该菜单或子菜单使用的存储器。

2 菜单设计步骤

  2.1 设计菜单层次结构图

  首先将多媒体作品中的所有菜单内容进行分类,相同级别相同类型的子菜单和菜单项放在一个下拉菜单中,从而设计出一个菜单结构总图。如设计一个三级菜单结构如图1所示。

001.jpg

  2.2 Authorware7中流程线上的菜单设计

002.jpg

  ⑴删除系统文件菜单。主流程线上添加一个名为“删除系统文件菜单”的群组图标。该群组图标设计如图2所示。其中名为“文件”的交互图标下放置一个未命名的空的群组图标,交互类型为下拉菜单。擦除图标的擦除对象就是上述文件这个交互图标。其运行效果是擦除原系统显示的文件菜单,只留下本程序设计要求的菜单内容。

003.jpg

  ⑵设计菜单结构图中所有菜单。在主流程上按照菜单结构图从外到内依次添加交互图标,一个菜单添加一个交互图标。设计各个菜单时,当一个菜单的所有菜单项均为子菜单时,该菜单下设计时至少放置一个下拉菜单项,如菜单结构图中的菜单A,两个菜单项均为子菜单,故设计时先添加一个菜单项A1,其目的是形成一个菜单,否则空的交互图标运行时不会出现菜单。如果菜单中除了子菜单还有其他菜单项,则仅放置那些菜单项即可,如菜单结构图中菜单B和菜单C。完成初始菜单设计后,如图3所示。

  其中,每个交互类型图标的属性设置均相同,如图4所示。

004.jpg

  2.3 子菜单的设计

  在流程线上再添加一个计算图标,命名为“三级菜单的调整”,利用外部文件WINAPI.U32中的有关菜单操作函数,实现三级菜单的设计,计算图标中的代码如下[1-2]:

  --获得窗口菜单的句柄

  menuhandle:=GetMenu(WindowHandle)

  --获得第一个菜单A的句柄

  subhandle1:=GetSubMenu(menuhandle,0)

  --获得第二个菜单B的句柄

  subhandle2:=GetSubMenu(menuhandle,1)

  --获得第3个菜单C的句柄

  subhandle3:=GetSubMenu(menuhandle,2)

  --获得第4个菜单D的句柄

  subhandle4:=GetSubMenu(menuhandle,3)

  --获得第5个菜单E的句柄

  subhandle5:=GetSubMenu(menuhandle,4)

  --删除第5个菜单E

  RemoveMenu(menuhandle,4,1024)

  --删除第4个菜单D

  RemoveMenu(menuhandle,3,1024)

  --重画菜单栏

  DrawMenuBar(WindowHandle)

  --将菜单E插入菜单C的第1个菜单项并命名为"菜单E"成为三级菜单

  InsertMenu(subhandle3,0,1040,subhandle5,"菜单E")[2]

  --将菜单D插入菜单B的第2个菜单项并命名为"菜单D"成为三级菜单

  InsertMenu(subhandle2,1,1040,subhandle4," 菜单D")

  --删除菜单C,准备将其加为菜单A的第1菜单项

  RemoveMenu(menuhandle,2,1024)

  --删除菜单B,准备将其加为菜单A的第2个菜单项

  RemoveMenu(menuhandle,1,1024)

  --重画菜单栏

  DrawMenuBar(WindowHandle)

  --将菜单B插入菜单A的第1个菜单项并命名为"菜单B"成为二级菜单

  InsertMenu(subhandle1,0,1040,subhandle2,"菜单B")

  --将菜单C插入菜单A作为第2个菜单项并命名为"菜单C"成为二级菜单

  InsertMenu(subhandle1,1,1040,subhandle3,"菜单C")

  --删除菜单A原来的菜单项A(插入之后被下移到第3项)

  DeleteMenu(subhandle1,2,1024)

  2.4 保存并打包运行程序

  程序运行结果如图5所示。

005.jpg

3 可能出现的问题及解决方法

  在设计过程及编译、打包、运行过程中可能会出现一些错误信息,如提示缺少、找不到JS32.dll的出错信息,这时可从网上下载一个JS32.dll文件拷贝到C:\Windows\System32下。再如出现提示“Unable to display icon "****" because the following error has occurred:Xtra not found.Other objects may also fail to appear.Records of this session will not be saved ”信息,这是因为文件在打包时,需要把文件中所用到的相关Xtra文件拷贝到打包生成的EXE文件所在的同级目录中,通常把Authorware安装目录下的Xtra文件夹整个复制到生成的EXE文件所在的同级目录中。

4 结论

  本文利用外部文件WINAPI.U32中的有关菜单操作函数,研究了在Authorware7中实现多级菜单的制作方法,并以三级菜单制作为例,提供了较为详细的设计过程。

参考文献

  [1] 吴伟信,傅子阳. Authorware中类Windows弹出式菜单模板的设计与实现[J]. 福建电脑, 2007(10):167,169.

  [2] 温杰. Authorware 菜单制作[J]. 电脑学习, 2009(4):45-47.


此内容为AET网站原创,未经授权禁止转载。