mfc多文档解决GetMenu()->GetSubMenu(0)为null,报错问题

mfc多文档解决GetMenu()->GetSubMenu(0)为null,报错问题


CMenu* menu;
menu = GetMenu()->GetSubMenu(0);
CMenu* childMenu = menu->GetSubMenu(8);//装载自定义的菜单

改为
CMenu pMenu = CMenu::FromHandle(m_wndMenuBar.GetHMenu());
CMenu
menu;
menu = pMenu->GetSubMenu(0);
CMenu* childMenu = menu->GetSubMenu(8);

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现步骤: 1. 在CViewTree类中添加成员变量CString m_strFilePath,用于保存文件路径。 2. 在CViewTree类的Create函数中添加以下代码,创建右键菜单: ``` // 创建右键菜单 m_pContextMenu = new CMenu; m_pContextMenu->CreatePopupMenu(); m_pContextMenu->AppendMenu(MF_STRING, ID_OPEN_FILE, _T("打开文件")); ``` 3. 在CViewTree类的OnContextMenu函数中添加以下代码,显示右键菜单: ``` CPoint pt; GetCursorPos(&pt); m_pContextMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this); ``` 4. 在CViewTree类的OnCommand函数中添加以下代码,处理右键菜单命令: ``` switch (nID) { case ID_OPEN_FILE: { // 打开文件对话框 CString strFilter = _T("所有文件(*.*)|*.*||"); CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, strFilter, NULL); if (dlg.DoModal() == IDOK) { m_strFilePath = dlg.GetPathName(); // TODO: 在CMainFrame类的OnOpenFile函数中打开文件 } } break; } ``` 5. 在CMainFrame类中添加OnOpenFile函数,用于打开文件: ``` void CMainFrame::OnOpenFile() { if (!m_wndView.m_pTreeCtrl) return; CString strFilePath = m_wndView.m_pTreeCtrl->m_strFilePath; if (!strFilePath.IsEmpty()) { // TODO: 打开文件处理 } } ``` 6. 在CMainFrame类的OnCreate函数中添加以下代码,将OnOpenFile函数与ID_OPEN_FILE命令关联: ``` // 将ID_OPEN_FILE命令与OnOpenFile函数关联 if (!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("未能创建工具栏\n"); return -1; } if (!m_wndStatusBar.Create(this)) { TRACE0("未能创建状态栏\n"); return -1; } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); CMenu* pMenu = GetMenu(); if (pMenu) { pMenu = pMenu->GetSubMenu(0); if (pMenu) { pMenu->InsertMenu(ID_FILE_NEW, MF_BYCOMMAND, ID_OPEN_FILE, _T("打开文件")); } } SetMenu(pMenu); DrawMenuBar(); ``` 7. 最后,在CViewTree类的OnSelChanged函数中添加以下代码,将文件路径传递给CMainFrame类: ``` // 将文件路径传递给CMainFrame类 if (pParent && pParent != &m_pTreeCtrl->GetRootItem()) { CString strFilePath = m_pTreeCtrl->GetItemPath(pParent) + _T("\\") + strText; ((CMainFrame*)AfxGetMainWnd())->m_wndView.m_pTreeCtrl->m_strFilePath = strFilePath; } ``` 完成上述步骤后,右键点击树形控件中的文件,选择“打开文件”,即可将文件路径传递给CMainFrame类,然后在CMainFrame类的OnOpenFile函数中处理文件打开操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值