1.添加菜单资源
打开类视图------》选中类文件----》邮件单击属性-----》点击事件----》打开IDC_ONLINE。
找到NM_RCLICK右键单击事件---》添加。
2.功能菜单项并写入相应的菜单ID
3.显示菜单
(1)参考gh0st代码,看一下gh0st是怎样显示菜单的
a.找到主菜单
b.查看主菜单的ID
c.搜索IDR_LIST
分析代码:
CMenu popup; //声明一个菜单变量
popup.LoadMenu(IDR_LIST); //载入菜单资源
CMenu* pM = popup.GetSubMenu(0); //得到菜单项
CPoint p;
GetCursorPos(&p); //得到鼠标指针的位置
int count = pM->GetMenuItemCount(); //得到菜单的个数
if (m_pListCtrl->GetSelectedCount() == 0) //如果没有选中列表中的条目
{
for (int i = 0; i < count - 2; i++) //遍历每一个菜单
{
pM->EnableMenuItem(i, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //该项变灰
}
pM->EnableMenuItem(count - 1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
}
// 全选
if (m_pListCtrl->GetItemCount() > 0) //列表中的条目项大于0
pM->EnableMenuItem(count - 2, MF_BYPOSITION | MF_ENABLED); //激活倒数第二个菜单
else
pM->EnableMenuItem(count - 2, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //否则变灰
pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this); //在指定位置显示菜单
}
(2)添加我们的代码
void CPcRemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CMenu popup; //实例化一个菜单
popup.LoadMenu(IDR_MENU_Online); //加载菜单
CMenu* pM = popup.GetSubMenu(0); //得到菜单项
CPoint p; //定义坐标
GetCursorPos(&p); //得到坐标
int count = pM->GetMenuItemCount(); //得到菜单数量
if (m_CList_Online.GetSelectedCount() == 0) //如果没有选中
{
for (int i = 0; i < count; i++)
{
pM->EnableMenuItem(i, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //菜单全部变灰
}
}
pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this); //显示菜单
*pResult = 0;
}
4、运行结果如下图:
总结:
注意如何使自己想要的菜单变灰色或者激活。