MFC-单文档程序:1).将CMainFrame类的构造函数的声明由protected改为public (目的是在view类添加成员变量CMainFrame Frame;)
2).在CMainFrame类中添加成员变量: CMenu menu;
3)在CMainFrame类中添加成员函数 void a(); 和 void b();
4).在void a()的实现函数中添加代码
{
menu.CreatePopupMenu();//添加菜单模型
}
5)在void b()的实现函数中添加代码
{
this->menu.AppendMenu(MF_STRING,201,"1");//在弹出菜单中动态添加菜单项}
6)在view类中添加头文件 :#include "MainFrm.h"
7)在view类中添加成员变量:CMainFrame Frame;
8)在view类中添加左键按下消息OnLButtonDown,下面是实现代码:
{ static bool b=true;
if(b==true)
{
Frame.a();//菜单模型
GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)Frame.menu.m_hMenu,"pop");//在菜单尾部添弹出菜单
Frame.b();//在弹出菜单中添加菜单项
GetParent()->DrawMenuBar();//刷新菜单
}
b=false;}此时运行,在客户区点击左键,出现弹出菜单,弹出菜单里也出现菜单项,属于正常。
此时问题也就来了,如果将上面view类中的左键按下消息里面的菜单刷新函数[GetParent()->DrawMenuBar()]删除,
在CMainFrame类中的void b()实现代码中添加菜单刷新函数:this->DrawMenuBar(); 这时候再编译,编译能通过,运行时,在客户区点击鼠标左键,就会出现 终止-重试-忽略 的对话框。
这个问题怎么解释啊,这是一个函数调用问题,道理能讲得通,为什么运行时就会出问题?向大家请教请教,这个问题怎么解决?
这句话是什么意思啊?
问题只是把DrawMenuBar()函数由view类删除,添加到了CMainFrame类的自定义函数中,然后在view类中去调用啊
在view中调用frame中的成员变量,【CMainFrame *pMain = (CMainFrame *) AfxGetMainWnd();】在view中定义frame的类对象,这个类对象并不是mfc单文档frame相关联的那个指针,所以得到的句柄为零