弹出式自绘特效菜单模块

易语言 2020-07-17 11:18:02

弹出式自绘特效菜单模块

.子程序 添加, , 公开, 加入需要特效的子菜单
.参数 cSubMenu, 整数型, , 子菜单句柄
.参数 Inheritance, 逻辑型, 可空, 是否继承 [孙子菜单] 默认为 真
.局部变量 Var, 整数型
.局部变量 iTemID, 整数型
.局部变量 ItemInfo, MENUITEMINFO

Inheritance = 选择 (是否为空 (Inheritance), 真, Inheritance)
ItemInfo.cbSize = LocalSize_MENUITEMINFO (ItemInfo)
ItemInfo.fMask = 位或 (#MIIM_STRING, #MIIM_FTYPE, #MIIM_STATE, #MIIM_SUBMENU, #MIIM_ID, #MIIM_DATA) ' 指定获取菜单项信息的种类
.计次循环首 (GetMenuItemCount (cSubMenu), Var) ' 取出子菜单项目数量
iTemID = GetMenuItemID (cSubMenu, Var - 1) ' 取项目ID
.如果真 (iTemID = -1 且 Inheritance) ' 弹出式 子菜单 且 继承子菜单
添加 (GetSubMenu (cSubMenu, Var - 1), Inheritance) ' 如果是子菜单 回调本函数 进行添加
PopMenuID = PopMenuID + 1
iTemID = PopMenuID ' 弹出式 菜单 自己定义为 0 不然会 修改失败.导致没有标题

.如果真结束
GetMenuItemInfo (cSubMenu, Var - 1, #MF_BYPOSITION, ItemInfo) ' 获取菜单项的信息
ModifyMenu (cSubMenu, Var - 1, 位或 (ItemInfo.fState, ItemInfo.fType, #MFT_OWNERDRAW, #MF_BYPOSITION), iTemID, cSubMenu)
' 输出调试文本 (到文本 (iTemID) + “ ” + 菜单_取标题 (cSubMenu, iTemID, 真))
' 上面一句代码非常重要.加入 #MFT_OWNERDRAW 后 消息处理可以 接受到 #WM_MEASUREITEM 等自绘必须的消息[自绘的关键当然也可以使用SetMenuItemInfo来实现].
' 把菜单项的类型;状态;并合并上自绘模式 ;指定为 按照序号来修改[原因:因菜单项ID可能为0(分隔条)] ; 把 子菜单句柄 写入 项目的数据中. 留作自绘使用.
' 菜单标题不修改啦. 留作修改菜单标题进行替换图标 序号
.计次循环尾 ()