使用CMDIChildWnd的createView导致assert异常

烂番 2008-01-30 04:17:19
在一个CMDIChildWnd窗体的鼠标双击事件中,新建一个带视图的子窗口,框架是MDI的


pChildWnd=new CChildFrame();
pChildWnd->Create(NULL,"bt950", WS_CHILD |WS_VISIBLE|WS_OVERLAPPEDWINDOW
,rectDefault,(CMDIFrameWnd*)AfxGetMainWnd());

CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CTrySizeBarView);
pView= (CTrySizeBarView*)pChildWnd->CreateView(&context);


其中变量
CMDIChildWnd * pChildWnd;
CTrySizeBarView *pView;
这两个都是成员变量,CTrySizeBarView是选择创建CRichEditView的MDI后,默认创建的VIEW类

问题就是上面代码的最后一行,如果注释掉,可以正常创建一个不带VIEW的子窗口,如果不注释可以正常创建带VIEW的子窗口,但关闭该子窗口时,会弹出ASSERT异常窗口"File: objcore.cpp Line:43"
查了下MFC源码:

BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
ASSERT(this != NULL);
......
}

是这里的assert错误,不大清楚原因,希望对这个错误清楚能帮忙解答下,不甚感激!
...全文
124 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
烂番 2008-02-01
  • 打赏
  • 举报
回复
嗯,搞定,关键是m_pCurrentDoc这个成员不能指定为NULL
又要找出CDocTemplate新建了个CDocument指定给它就OK了,似乎理解为VIEW一定要带上文档?不然析构这个VIEW会出问题?

谢谢上面两位了!星星多的少给点分了,哈哈

还有 STATIC_DOWNCAST这个宏,咋创建的VIEW不是附在pChildWnd上,将context.m_pCurrentFrame = pChildWnd也还是吸附在其它的窗口上,头大啊
my_girlf 2008-01-30
  • 打赏
  • 举报
回复
CCreateContext context;
context.m_pCurrentDoc = NULL;
context.m_pCurrentFrame = this;
context.m_pLastView = NULL;
context.m_pNewViewClass = RUNTIME_CLASS(CTrySizeBarView);
context.m_pNewDocTemplate = NULL;
pView = STATIC_DOWNCAST(CTrySizeBarView,CreateView(&context));

pView是成员变量,不是局部变量.
菜牛 2008-01-30
  • 打赏
  • 举报
回复
CCreateContext的成员都要初始化一下。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧