前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MFC如何修改文件视图FileView中已有的树结构的右键菜单(其相应函数为OnContextMenu),即如何增加/修改/删除 菜单项?

MFC如何修改文件视图FileView中已有的树结构的右键菜单(其相应函数为OnContextMenu),即如何增加/修改/删除 菜单项?

作者头像
acoolgiser
发布2019-01-17 10:18:38
1.3K0
发布2019-01-17 10:18:38
举报
文章被收录于专栏:acoolgiser_zhuanlan

在用VS做MFC编程时,新建的工程中自带了文件视图/类视图/属性窗口/输出窗口等内容。文件视图FileView中具有初始右键菜单,如图所示:

那么如果想要给这个右键菜单增加菜单项,该如何实现呢?

1. 首先可以看一下这个右键菜单是在哪里响应的,打开FileView.cpp,里面有一个OnContextMenu响应事件,其代码如下:

代码语言:javascript
复制
void CFileView::OnContextMenu(CWnd* pWnd, CPoint point)  //右键菜单
{
	CTreeCtrl* pWndTree = (CTreeCtrl*) &m_wndFileView;
	ASSERT_VALID(pWndTree);

	if (pWnd != pWndTree)
	{
		CDockablePane::OnContextMenu(pWnd, point);
		return;
	}

	if (point != CPoint(-1, -1))
	{
		// 选择已单击的项:
		CPoint ptTree = point;
		pWndTree->ScreenToClient(&ptTree);

		UINT flags = 0;
		HTREEITEM hTreeItem = pWndTree->HitTest(ptTree, &flags);
		if (hTreeItem != NULL)
		{
			pWndTree->SelectItem(hTreeItem);
		}
	}

	pWndTree->SetFocus();
	theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EXPLORER, point.x, point.y, this, TRUE);
}

          在网上找了很多关于右键菜单的实现方法,与FileView相关的很难找到,应该是因为平常多数人用到的右键菜单都是给某个对话框窗体添加自定义的菜单,会涉及到右键点击事件OnRButtonDown ; WM_CONTEXTMENU消息等。

          然而这里我是想给文件视图中已有的右键菜单添加几个菜单项,增加功能。通过仔细分析上面的代码发现,在最后一句通过ShowPopupMenu方法绑定了ID为IDR_POPUP_EXPLORER的资源,这才是真正的菜单所在,于是转到IDR_POPUP_EXPLORER的定义,发现是在Resource.h中定义的。

          因此打开资源视图(在VS顶部的菜单项:视图->其他窗口->资源视图),如下图,Menu中ID为IDR_POPUP_EXPLORER的菜单项,即打开了该右键菜单。

打开后可以添加/修改/删除菜单项,如图:

最后给菜单项添加响应事件,实现代码即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档