MFC单击菜单项如何弹出对话框?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC单击菜单项如何弹出对话框?相关的知识,希望对你有一定的参考价值。

单击insert—单击Resource—选中Dialog,然后点击New。在新建的对话框里
右击
,选择
ClassWizard
,跳出一个对话框,在creat。。。情况下,选中OK!在name 输入你想要的名字,比如ab01,后点OK。再OK!
找到Resource的主对话框(IDD_MY....),双击,再双击上面的按钮,点ok!在//TOdo。。。下行输入如此代码:
ab01 t;
t.DoModal();
强调这里大小写要区分
然后 把文件拉到顶端
在#include "007Dlg.h"下面输入
#include "ab01.h"
然后运行 调试 即可 !
参考技术A 在菜单上单击鼠标右键"建立类向导",添加COMMAND命令,然后在实现文件中弹出对话框:当然在之前你必须先创建对话框类,CDlg_Test.然后在实现文件中写下:
CDlg_Test
dlg;
dlg.DoModal();
即可!(当然要在头文件中添加
CDlg_Test
的引用
#include"Dlg_Test")本回答被提问者采纳

如何将消息映射添加到 MFC 中的动态菜单项

【中文标题】如何将消息映射添加到 MFC 中的动态菜单项【英文标题】:how to add message map to dynamic menu item in MFC 【发布时间】:2009-12-22 12:03:01 【问题描述】:

我正在编写一个具有列表视图控件的 MFC。当用户右键单击任何项​​目时,我将生成一个动态菜单项,其中包含在列表视图中选择的文本。一切都正常显示,但我不知道如何将消息映射添加到该动态菜单项。

有什么帮助吗?

void CMyListDlg::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) 
    
        // TODO: Add your control notification handler code here


        int nIndex = m_List.GetSelectionMark();
        CString pString = m_List.GetItemText(nIndex,1);
        CMenu menu, * pSubMenu;
        int pos=0;
        menu.LoadMenu(IDR_MENU1);
        pSubMenu = menu.GetSubMenu (0);
        pSubMenu->DeleteMenu(0,MF_BYPOSITION);
        pSubMenu->InsertMenu(pos,MF_BYPOSITION,NULL,pString);
            CPoint oPoint;
        GetCursorPos (& oPoint);
        pSubMenu-> TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);






        *pResult = 0;
    

【问题讨论】:

【参考方案1】:

此时您正在插入 ID = 0 (NULL) 的菜单项。这样你就无法确定按下了哪个命令。您必须为该项目分配一个ID,最简单的一个是

#define WM_MYMESSAGE WM_USER + 1

然后你像这样插入它:

pSubMenu->InsertMenu(pos,MF_BYPOSITION,WM_MYMESSAGE,pString);

如果您为您的窗口覆盖 OnCommand,您的 ID 为 wParam。 要真正弄清楚发生了什么,请将一些附加信息存储在另一个班级成员中,例如 m_nLastItemClicked 或......你明白了吗?!

【讨论】:

我不完全明白如何覆盖 onCommand,我的消息映射目前有这个 ON_COMMAND(IDM_FILE_OPEN, OnFileOpen) 您只需添加 ON_COMMAND(WM_MYMESSAGE, OnMyMessage) 处理程序,假设您在 InsertMenu 上使用了 WM_MYMESSAGE【参考方案2】:

查看MFCIE sample,它会从用户的收藏夹中生成收藏夹菜单,并在点击收藏夹菜单项时导航到收藏夹网址。

【讨论】:

【参考方案3】:

只需为您的类中的菜单项 ID 添加ON_COMMAND(和ON_UPDATE_COMMAND_UI,如有必要)处理程序。

【讨论】:

但这些是动态菜单项,我不知道它们的 ID 你知道可能的身份证号码的范围吗?在这种情况下,您可以添加 ON_COMMAND_RANGE 我只生成一个菜单项。我尝试使用 ON_COMMAND_RANGE,但可以理解如何将其用于未知(只有 1 个)动态菜单 @dwo 提供了正确答案,我没有意识到您正在插入带有 NULL 作为 ID 的菜单项。

以上是关于MFC单击菜单项如何弹出对话框?的主要内容,如果未能解决你的问题,请参考以下文章

MFC中实现点击菜单的选项弹出一个对话框

MFC对话框中如何响应弹出式菜单事件 点击按钮 弹出菜单 菜单消息事件响应不了

如何让MFC对话框中的Menu菜单变灰或恢复

关于MFC主菜单和右键弹出菜单

请教实现android工程中点击菜单弹出一个对话框

VS2017 MFC应用中添加模态对话框时为其添加类弹出如下错误