MFC控件内加右键功能

MFC控件内加右键功能

此文章以ListCtrl控件为例子进行实现

  1. 新建对话框(新建dialog)
    前面介绍过如何新建,戳这里查看
  2. 新建menu
    前面介绍过如何新建,戳这里查看
  3. 新建LIstCtrl控件
    前面介绍过如何新建,戳这里查看
  4. 给控件添加NM_RCLICK消息映射
  • 根据下图中步骤选择添加控件NM_RCLICK
  • 1 意思是选中ListCtrl控件,然后再到它的属性中去操作2、3、4、5、6。
  • 完成之后会自动跳出OnNMRClickList的函数。
  1. 创建右键
  • 在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;
  1. 创建并实现右键事件函数
  • 函数实现
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文件中记得声明

这样控件右键就能使用了,仅仅只在控件区域内起作用的右键功能。

发布了84 篇原创文章 · 获赞 63 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/wsq119/article/details/103435353