网上的代码:
.版本 2
.判断开始 (msg = 279) ' 当菜单要弹出时收到此消息
初始菜单 (wparam) ' wparam 菜单句柄
.判断 (msg = 44) ' 修改菜单大小
.如果真 (wparam = 0) ' 菜单
CopyMemory_mis (miss, lparam, 24)
写到内存 (159, lparam + 12, ) ' 159+20=实际宽度
写到内存 (选择 (miss.itemData = 3, 7, 22), lparam + 16, ) ' 高度22
返回 (1)
.如果真结束
.判断 (msg = 43) ' 自绘菜单
.如果真 (wparam = 0) ' 菜单
CopyMemory_dis (dis, lparam, 48)
局_菜单窗口 = WindowFromDC (dis.hdc)
.如果真 (GetProp (局_菜单窗口, “nihao”) = 0) ' 画菜单窗口边框,是画在非客户区的
GetClientRect (局_菜单窗口, rcItem)
局_图形.创建自DC (GetWindowDC (局_菜单窗口))
画边框 (局_图形, 0, 0, rcItem.right + 5, rcItem.bottom + 5, #黑色, #白色)
局_图形.销毁 ()
SetProp (局_菜单窗口, “nihao”, 1)
.如果真结束
' 画客户区菜单条目
局_图形.创建自DC (dis.hdc)
局_画刷.创建 (RGB到ARGB (#白色)) ' 菜单色
.如果真 (dis.itemState = 257) ' 257=选中 256=普通
.如果真 (dis.itemData ≠ 3)
局_画刷.置颜色 (RGB到ARGB (选择 (dis.itemData = 1 或 dis.itemData = 9, 14803425, 15917777))) ' 背景颜色
.如果真结束
.如果真结束
局_图形.填充矩形I (局_画刷, dis.rcItem.left, dis.rcItem.top, dis.rcItem.right, 选择 (dis.itemData = 3, 7, 22)) ' 画条目背景
画线条 (局_图形, 31, dis.rcItem.top, 31, dis.rcItem.top + 选择 (dis.itemData = 3, 7, 22), RGB到ARGB (#粉红)) ' 画左竖条
.判断开始 (dis.itemData = 3) ' 此为横杠项目
画线条 (局_图形, 31, dis.rcItem.top + 3.5, dis.rcItem.right, dis.rcItem.top + 3.5, RGB到ARGB (#粉红))
.默认
菜单文本 = 取空白文本 (256)
GetMenuString (dis.hwndItem, dis.itemID, 菜单文本, 256, 0)
菜单文本 = 子文本替换 (菜单文本, “&”, “”, , 1, 真)
.判断开始 (dis.itemData = 1 或 dis.itemData = 9)
局_画刷.置颜色 (RGB到ARGB (#灰绿)) ' 禁用项目文本色
.默认
局_画刷.置颜色 (RGB到ARGB (#红褐)) ' 普通项目文本色
.判断结束
局_图形.画文本 (菜单文本, 集_字体, 局_画刷, 制矩形F (35, dis.rcItem.top, dis.rcItem.right, 22), 集_格式)
.如果真 (dis.itemData = 8 或 dis.itemData = 9)
.判断开始 (dis.itemData = 9) ' 禁止
画边框 (局_图形, 0, dis.rcItem.top, 22, 21, 11447982, 14803425)
.默认
画边框 (局_图形, 0, dis.rcItem.top, 22, 21, #天蓝, 15917777)
.判断结束
局_图像.创建自字节集 (#对钩)
局_图形.画图像I (局_图像, 6, dis.rcItem.top + 6)
局_图像.销毁 ()
.如果真结束
.如果真 (dis.itemState = 257)
画空心框 (局_图形, 0, dis.rcItem.top, dis.rcItem.right - 1, 21, 选择 (dis.itemData = 1 或 dis.itemData = 9, 11447982, #天蓝))
.如果真结束
.判断结束
局_画刷.销毁 ()
局_图形.销毁 ()
.如果真结束
.默认
.判断结束
返回 (CallWindowProc (WinProc, hwnd, msg, wparam, lparam))
但是 设置字体为 微软雅黑 14大小的情况下 子菜单的小三角形 位置不对, 还是对应系统默认字体大小时 矩形的位置,
GetClientRect (局_菜单窗口, rcItem) 能获取到原来菜单矩形,但是怎么强制改这个矩形? 。。。菜单项目想要30的高度.
求解
上图:
补充内容 (2018-11-4 15:55):
写到内存 (选择 (miss.itemData = 3, 7, 22), lparam + 16, ) ' 高度22 把所有22替换为30, 菜单项目的确30的高度了..但是这个小箭头时系统后期默认画上去的...怎么改 |