MFC动态创建MenuID
时间: 2023-12-11 12:58:03 浏览: 88
在MFC中动态创建MenuID需要以下步骤:
1. 在资源视图中添加一个菜单(比如IDR_MENU1),并在其中添加一个子菜单项(比如ID_DYNAMIC_MENU)。
2. 在你的应用程序类的头文件中添加菜单ID定义:
```cpp
#define ID_DYNAMIC_MENU_FIRST 50000
#define ID_DYNAMIC_MENU_LAST 50500
```
3. 在你的应用程序类的.cpp文件中添加以下函数:
```cpp
void CMyApp::AddDynamicMenuItems(CMenu* pMenu)
{
// 按需添加动态菜单项
for (int i = ID_DYNAMIC_MENU_FIRST; i < ID_DYNAMIC_MENU_LAST; i++)
{
CString strMenuText;
strMenuText.Format(_T("Dynamic Menu Item %d"), i - ID_DYNAMIC_MENU_FIRST + 1);
pMenu->AppendMenu(MF_STRING, i, strMenuText);
}
}
```
4. 在你的主框架窗口类的.cpp文件中添加以下代码:
```cpp
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
// 创建视图窗口
...
// 创建菜单条
if (!m_wndMenuBar.Create(this))
{
TRACE0("Failed to create menubar\n");
return FALSE;
}
m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// 创建菜单
CMenu* pMenu = m_wndMenuBar.GetMenu();
if (!pMenu->LoadMenu(IDR_MENU1))
{
TRACE0("Failed to load menu\n");
return FALSE;
}
// 添加动态菜单项
((CMyApp*)AfxGetApp())->AddDynamicMenuItems(pMenu->GetSubMenu(0));
// 更新菜单
m_wndMenuBar.DrawMenuBar();
return TRUE;
}
```
这样就可以在你的菜单中动态添加菜单项了。注意,菜单项ID必须在ID_DYNAMIC_MENU_FIRST和ID_DYNAMIC_MENU_LAST之间。
阅读全文