不给菜单选项添加响应函数,则如何响应菜单上的选项

zyc_lc 2008-06-27 05:44:35
因为菜单选项很多,所以不想给每个选项都添加函数,太累赘了感觉.
我记得以前用过一次,好象是ON_COMMAND_RANGE,只要获得选项的ID\或则编号即可处理消息响应,请各位指点,谢谢
...全文
91 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
缘来是梦 2008-06-30
  • 打赏
  • 举报
回复
有个笨一点的方法,在MessageMap里把所有的菜单项的响应函数都设成同一个函数.
zyc_lc 2008-06-30
  • 打赏
  • 举报
回复
比如我现在有4个选项,他们的ID是ID_SLOT82,ID_SLOT83,ID_SLOT84,ID_SLOT85
在resource.h里:
#define ID_SLOT83 32777
#define ID_SLOT84 32778
#define ID_SLOT85 32779
#define ID_SLOT86 32780

请问我是不是直接建立一个虚函数:OnCommand(),然后在OnCommand()里 如何开始对应一个个ID来判断左击选择的是哪个选项?
麻烦各位再指点一下
zyc_lc 2008-06-30
  • 打赏
  • 举报
回复
我已经明白了 谢谢各位
zyc_lc 2008-06-30
  • 打赏
  • 举报
回复
BOOL PSlotConfig::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
ON_COMMAND_RANGE(ID_SLOT82,ID_SLOT100,ID_SLOT82)
{
MessageBox("zzzzzz");
}
return CPropertyPage::OnCommand(wParam, lParam);
}???

还是不会.
比如:MENU的名称是:IDR_RIGHTCLICKMENU 在他上面有一个选项,选项中有4个子选项,他们的ID是ID_SLOT82,ID_SLOT83,ID_SLOT84,ID_SLOT85
请问如何实现?
麻烦大哥们就这个例子帮我开导开导
rickymathit 2008-06-30
  • 打赏
  • 举报
回复
#define ID_SLOT83 32777
#define ID_SLOT84 32778
#define ID_SLOT85 32779
#define ID_SLOT86 32780


ON_COMMAND_RANGE(ID_SLOT83, ID_SLOT86, OnCommandItem)

ON_COMMAND_RANGE()的对应函数形式是void (CCmdTargerd*)(UINT)
所以你的这个OnCommandItem有个UINT类型的参数,这个参数就是相应的菜单项ID
你处理这个函数的时候直接拿这个ID来作判断进行区分就行了
cnzdgs 2008-06-27
  • 打赏
  • 举报
回复
如果要映射消息函数就用ON_COMMAND_RANGE;也可以重载主窗口与WM_COMMAND有关的虚函数。
janvi 2008-06-27
  • 打赏
  • 举报
回复
OnCommand当你做消息映射时必须指定ID 也得一个一个的来
你自己说的ON_COMMAND_RANGE就是对的
erjiegun 2008-06-27
  • 打赏
  • 举报
回复
对,同意楼上的
mycool2001 2008-06-27
  • 打赏
  • 举报
回复
OnCommand
HIWORD(wParam) //If the message is from a menu, the high-order word is 0.
LOWORD(wParam) //The low-order word of wParam identifies the command ID

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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