新手学习vs2010运行mfc的问题

代码如下,我在视类加入如下代码,想实现输入字符后敲击回车在菜单栏生成一个动态菜单,但是敲下回车的时候程序就崩溃了,求助
void CMy321555555555555555555View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(0x0d==nChar)
{
if(0==++m_nIndex)
{
m_menu.CreatePopupMenu();
GetParent()->GetMenu()->AppendMenuA(MF_POPUP,(UINT)m_menu.m_hMenu,"PhoneBook");
DrawMenuBar();
}
}
CView::OnChar(nChar, nRepCnt, nFlags);
}

3个回答

MFC动态菜单全攻略
// 假设在ChildFrm中,调用该方法获得当前的主菜单指针
CMenu* mainMenu = AfxGetMainWnd()->GetMenu();
CMenu* subMenu = NULL;

// 遍历主菜单下的各级菜单寻找名为MainSubMenu1的菜单
int menuCount = mainMenu->GetMenuItemCount();

for(int i = 0; i < menuCount; i++)
{
    CString menuName;
    if(mainMenu->GetMenuStringA(i, menuName, MF_BYPOSITION)
        && menuName == "&MainSubMenu1")
    {
        drawingMenu = mainMenu->GetSubMenu(i);
        break;
    }
}

// 移除原有的菜单项
int subMenu1Count = subMenu->GetMenuItemCount();
for(int i = subMenu1Count - 1; i >= 0; i--)
{
    subMenu->DeleteMenu(i, MF_BYPOSITION);
}

// 动态添加Item菜单项
for(int i = 0; i < 2; i++)
{

    CString message = "";

    subMenu->AppendMenuA(MF_STRING, ID_BEGIN + i, message.Format("SubSubMenu%i", i);

}

// 添加分隔符

subMenu->AppendMenuA(MF_SEPARATOR);

// 添加弹出式子菜单

CMenu * popupMenu = new CMenu();
popupMenu->CreateMenu();
for(int i = 0; i < 2; i++)
{

    CString message = "";

    popupMenu->AppendMenuA(MF_STRING, ID_BEGIN + 2 + i, message.Format("PopupSubMenu%i", i));

}
subMenu->AppendMenuA(MF_POPUP, (UINT_PTR)popupMenu->operator HMENU(), "PopupMenu");



    http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826816.html

m_menu是否为空
GetParent()是否为空
DrawMenuBar()怎么实现的

class m_menu里面有没有具体成员看不出来,一些成员函数也不清楚其实现的过程

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐