MFC控件内加右键功能
此文章以ListCtrl控件为例子进行实现
- 新建对话框(新建dialog)
前面介绍过如何新建,戳这里查看 - 新建menu
前面介绍过如何新建,戳这里查看 - 新建LIstCtrl控件
前面介绍过如何新建,戳这里查看 - 给控件添加NM_RCLICK消息映射
- 根据下图中步骤选择添加控件NM_RCLICK
- 1 意思是选中ListCtrl控件,然后再到它的属性中去操作2、3、4、5、6。
- 完成之后会自动跳出OnNMRClickList的函数。
- 创建右键
- 在OnNMRClickList函数中加入下列代码
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
//不仅仅只适应于ListCtrl
CMenu menu, *pPopup;
menu.LoadMenu(IDR_MENU3);
pPopup = menu.GetSubMenu(0);
CPoint myPoint;
ClientToScreen(&myPoint);
GetCursorPos(&myPoint); //鼠标位置
if (pNMListView->iItem == -1)
{
pPopup->EnableMenuItem(ID_DELETE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, myPoint.x, myPoint.y, this);
pPopup->Detach();
menu.DestroyMenu();
*pResult = 0;
- 创建并实现右键事件函数
- 函数实现
void AddSigDlg::OnMenuitem1()
{
SetAndAddSigDlg Dlg;
Dlg.DoModal();
}
void AddSigDlg::OnMenuitem2()
{
SetAndAddSigDlg Dlg;
Dlg.DoModal();
}
- 添加响应消息映射
ON_COMMAND(ID_INSERT, &AddSigDlg::OnMenuitem1)//ID_MENUITEM4消息映射
ON_COMMAND(ID_DELETE, &AddSigDlg::OnMenuitem2)//ID_MENUITEM4消息映射
- .h文件中记得声明
这样控件右键就能使用了,仅仅只在控件区域内起作用的右键功能。