mfc鼠标点击弹出菜单
时间: 2023-08-29 13:07:15 浏览: 186
arxMenubarDemo,arx带mfc工具栏,弹出式下拉菜单以及图标按钮,跟随鼠标自动弹出菜单,源自网络
可以通过以下步骤在 MFC 中实现鼠标点击弹出菜单:
1. 在资源视图中添加一个菜单资源。
2. 在 CMainFrame 类的头文件中定义一个成员函数 OnContextMenu,并在源文件中实现该函数。
```c++
// MainFrm.h
class CMainFrame : public CFrameWnd {
public:
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
...
};
// MainFrm.cpp
void CMainFrame::OnContextMenu(CWnd* pWnd, CPoint point) {
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CPoint pos = point;
ClientToScreen(&pos);
CMenu* pPopupMenu = menu.GetSubMenu(0);
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, this);
}
```
3. 在 CMainFrame 类的消息映射中添加对 WM_CONTEXTMENU 消息的处理。
```c++
// MainFrm.h
class CMainFrame : public CFrameWnd {
public:
...
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
...
};
// MainFrm.cpp
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
...
ON_WM_CONTEXTMENU()
END_MESSAGE_MAP()
void CMainFrame::OnContextMenu(CWnd* pWnd, CPoint point) {
if (pWnd == this) {
OnContextMenu(pWnd, point);
}
}
void CMainFrame::OnRButtonUp(UINT nFlags, CPoint point) {
ClientToScreen(&point);
OnContextMenu(this, point);
CFrameWnd::OnRButtonUp(nFlags, point);
}
```
4. 在需要弹出菜单的控件类中重写 OnContextMenu 函数,调用 CMainFrame 的 OnContextMenu 函数。
```c++
// MyView.h
class CMyView : public CView {
public:
...
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
...
};
// MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
...
END_MESSAGE_MAP()
void CMyView::OnContextMenu(CWnd* pWnd, CPoint point) {
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
pFrame->OnContextMenu(pWnd, point);
}
```
5. 编译运行程序,然后在程序中鼠标右键单击鼠标,在窗口中弹出菜单。
阅读全文