当我查看原来写的MFC代码时,发现了一个不可思议的问题,代码如下
CMyView * CDialogViewDlg::openNewView(CMyDocument * newDoc)
{
CCreateContext pContext;
pContext.m_pCurrentDoc = newDoc;
pContext.m_pNewViewClass = RUNTIME_CLASS(CMyView);
。。。
CMyView * newView = (CMyView *)((CFrameWnd*)this)->CreateView(&pContext);
ASSERT(newView);
。。。
return newView;
}
注意代码里的(CFrameWnd*)this)->CreateView(&pContext);
我先把CDialogEx继承下来的对象指针this强制性转换成CFrameWnd*,再调用CFrameWnd类的CreateView创建View窗口,结果成功!!
我万万不解的是CDialogEx类从CWnd类继承而来,而CFrameWnd类也是从CWnd继承而来,表明CDialogEx和CFrameWnd的对象是“兄弟”关系,但怎么强制转换后就可以调用平辈的CreateView,而且还成功了?!求哪位大神帮我解释一下,谢谢!!