AppendMenu与OnCommand之间参数传递问题

wuqiangu 2009-03-04 09:55:54
环境:XP,vs2005
状况:在CWnd派生类控件CMyWnd的成员函数中,用CMenu.CreatePopupMenu()创建菜单。用CMenu.AppendMenu(MF_STRING,ID, "test")添加菜单项。
用CMenu.TrackPopupMenu(,,,this)设置菜单位置等.这样,点击菜单项时,相应CMyWnd::OnCommand(wParam,lParam)函数。
通常LOWORD(wParam)低位两个字节是用来接受菜单AppendMenu中的ID号的,,我的程序中AppendMenu中的ID被设置成4字节数字(特殊用
途),好像就有了矛盾
问题:(一)这种情况下,是属于菜单命令,还是控件命令?command ID of the menu item or control ?
(二)这种情况下,OnCommand的LOWORD(wParam)不能辨别传过来的ID。wParam的4个字节全用上就可以了,这样高位2字节岂不是失去了原来的意义?
(三)AppendMenu中的ID是不是不准传递4字节的数据?(我没有设置MF_POPUP)

...全文
296 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwx300 2009-03-04
  • 打赏
  • 举报
回复
使用 SetMenuItemInfo 好像可以设置菜单项目的附加数据。

MENUITEMINFO
dwItemData
菜牛 2009-03-04
  • 打赏
  • 举报
回复
菜单ID就是菜单ID,不要因为什么特殊用途就违反设计原则,倒是应该考虑修改你的特殊用途。
arong1234 2009-03-04
  • 打赏
  • 举报
回复
个人认为这不能因为你特殊用途就可以设置4字节的,你的设置可能会破坏系统其他的api处理
应用的特殊需要应该通过你内部算法实现,而不应该用违背系统约定的方式去做
wuqiangu 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 oyljerry 的回复:]
确保新项的ID大于0小于0XF000。因为大于等于0XF000的范围为系统命令所保留使用。你也可以调用类SystemMenu的静态方法VerifyItemID来核验是否你的ID正确。
[/Quote]

在网上一搜VerifyItemID,有关C#的东西全蹦出来了。。请问C++中,怎么用?
lwx300 2009-03-04
  • 打赏
  • 举报
回复
如果是菜单:if (0 == HIWORD(wParam) && 0 == lParam)
oyljerry 2009-03-04
  • 打赏
  • 举报
回复
确保新项的ID大于0小于0XF000。因为大于等于0XF000的范围为系统命令所保留使用。你也可以调用类SystemMenu的静态方法VerifyItemID来核验是否你的ID正确。
jameshooo 2009-03-04
  • 打赏
  • 举报
回复
命令ID只能使用低位两字节,不可以占用高位字节,你需要重新设计ID范围。
guogangj 2009-03-04
  • 打赏
  • 举报
回复
2,那就4个字节全用,本来对菜单来说高2字节就是没有意义的。
3,是4字节,没错。
wuqiangu 2009-03-04
  • 打赏
  • 举报
回复
谢谢。
设计ID范围,关联自定义数据。
结贴!
cnzdgs 2009-03-04
  • 打赏
  • 举报
回复
ID只能用2字节,多于2字节时后果无法预料。你可以用SetMenuItemInfo给菜单项关联自定义数据。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧