MFC动态创建 menu 菜单
时间: 2023-11-22 10:05:26 浏览: 85
MFC 中可以通过 CMenu 类来动态创建菜单。
以下是一个简单的示例代码:
1. 在需要使用菜单的窗口类中添加成员变量 `CMenu m_menu;`
2. 在窗口创建时创建菜单
```cpp
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 创建菜单
m_menu.CreatePopupMenu();
m_menu.AppendMenu(MF_STRING, ID_MENU_ITEM_1, L"菜单项1");
m_menu.AppendMenu(MF_STRING, ID_MENU_ITEM_2, L"菜单项2");
m_menu.AppendMenu(MF_SEPARATOR);
m_menu.AppendMenu(MF_STRING, ID_MENU_ITEM_3, L"菜单项3");
return TRUE;
}
```
3. 在需要弹出菜单的位置,调用菜单的 `TrackPopupMenu` 方法
```cpp
void CMyDialog::OnContextMenu(CWnd* pWnd, CPoint point)
{
// 显示菜单
m_menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
}
```
在上述代码中,我们创建了一个弹出菜单,并添加了三个菜单项,其中 `ID_MENU_ITEM_1`、`ID_MENU_ITEM_2`、`ID_MENU_ITEM_3` 是自定义的菜单项 ID,需要在资源文件中进行定义。
当用户在窗口中右击时,会调用 `OnContextMenu` 方法,我们在该方法中调用菜单的 `TrackPopupMenu` 方法来显示菜单。
需要注意的是,在销毁窗口时,需要销毁菜单,可以在窗口的 `OnDestroy` 方法中进行销毁:
```cpp
void CMyDialog::OnDestroy()
{
CDialogEx::OnDestroy();
// 销毁菜单
m_menu.DestroyMenu();
}
```
阅读全文