VS 2019 MFC 右键弹出菜单栏简单例程

35 篇文章 8 订阅

1》新建菜单栏。

2》重载virtual BOOL PreTranslateMessage(MSG* pMsg);

3》加载菜单栏。

4》设置菜单栏显示位置。

5》右键显示菜单栏。

6》分离菜单栏。

7》m_ALarmMsgListBox为CListBox绑定变量。

 

BOOL CMFCApplicationJstReflowDlg::PreTranslateMessage(MSG* pMsg)
 {
	 CWnd* m_tHwnd = AfxGetApp()->GetMainWnd();
	 if (WM_RBUTTONDOWN == pMsg->message)
	 {
		 CPoint pt;
		 CRect  rtClient;
		 m_ALarmMsgListBox.GetClientRect(&rtClient);
		 m_ALarmMsgListBox.ClientToScreen(&rtClient);
		 int isCrollPos = m_ALarmMsgListBox.GetScrollPos(SB_VERT);
		 GetCursorPos(&pt);
		 int iSelect = (pt.y - rtClient.top + isCrollPos * m_ALarmMsgListBox.GetItemHeight(0)) / m_ALarmMsgListBox.GetItemHeight(0);
		 m_ALarmMsgListBox.SetCurSel(iSelect);
		 m_ALarmMsgListBox.Invalidate();
		 m_ALarmMsgListBox.RedrawWindow();
		 if (rtClient.PtInRect(pt) && iSelect < m_ALarmMsgListBox.GetCount())
		 {
			 CMenu m_Mymenu;
			 m_Mymenu.LoadMenuW(IDR_MENUCLIST);
			 m_Mymenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this, NULL);
			 m_Mymenu.Detach();
		 }
	 } 
	 return CDialogEx::PreTranslateMessage(pMsg);
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值