public function integer position (menu menuitem) /**//************************************************************************************ 用途:获取指定菜单项在菜单中的位置 参数: menuItem 待确定位置的菜单项 返回值: 如果菜单有效且菜单项是可见的,则返回非0值;否则,返回0。 ************************************************************************************/ int i, j, n menu mParent mParent = menuItem.GetParent( ) if not IsValid(mParent) then return0 n = upperBound(mParent.Item) for i =1 to n if mParent.Item[i].visible then j ++ if mParent.Item[i] = menuItem then return j end if next return0 end function
public function long handle (menu menuitem) /**//*********************************************************************** 用途:获取指定菜单项的菜单句柄 参数: menuItem 待确定菜单句柄的菜单项 返回值: 返回菜单句柄 ************************************************************************/ menu mParent mParent = menuItem.GetParent( ) if not IsValid(mParent) then return GetMenu(handle(ParentWindow)) else return GetSubMenu(handle(mParent), position(menuItem) -1) end if end function
需要说明的是:
本身不是子菜单的菜单项是没有句柄的,只有菜单才有句柄。
所以方法 handle 获取的是指定菜单项 (无论是否是子菜单) 所在的父菜单的句柄。
定义 m_base 的方法 checkradio:
public function boolean checkradio (menu itemfirst, menu itemlast, menu itemcheck) /**//*************************************************************************************** 用途:设置单选菜单项 参数: itemFirst 组里的第一个菜单项 itemLast 组里的最后一个菜单项 itemCheck 组里的被选中的菜单项 返回值: 如果父菜单存在且 API 调用成功,则返回 TRUE;否则,返回 FALSE。 ****************************************************************************************/ menu mParent mParent = itemFirst.GetParent( ) if IsValid(mParent) then return CheckMenuRadioItem(handle(mParent), position(itemFirst) -1, & position(itemLast) -1, position(itemCheck) -1, 1024) //MF_BYPOSITION else returnfalse end if end function