主题:[讨论][重大问题]窗口的创建用到的虚函数Create()
[color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF]大家知道Create()是CWnd的一个虚函数,CWnd的子类CFrameWnd中也有一个Create()函数,CFrameWnd的一个子类CMDIFrameWnd继承CFrameWnd的Create(),CFrameWnd的另一个子类CMDIChildWnd重写了函数Create()。除了类CMDIChildWnd的Create()函数没有调用CWnd::CreateEx()(注:CWnd类有两个CreateEx()函数,这里指的是参数多的那一个).其余的都调用CWnd::CreateEx()进行窗口的注册PreCreateWindow()和创建::CreateWindowEx()。在多文档程序中通常利用LoadFrame()调用Create函数。在程序中有
CMainFrame* pMainFrame = new CMainFrame;(CMainFrame当然是从CMDIFrameWnd派生而来的啦),然后pMainFrame->LoadFrame()这里的LoadFrame()是CMDIFrameWnd类的。而CMDIFrameWnd::LoadFrame()又会调用CFrameWnd::LoadFrame(),再由LoadFrame()去调用Create函数,到底调用哪一个Create()呢?由于Create函数是虚函数,所以pMainFrame这个指针是决定因素!如果在MainFrm.cpp(CMainFrame类的实现文件)没有重写Create()函数,调用的就是CMDIFrameWnd::Create(),它又是从CFrameWnd中继承过来的。接着CFrameWnd::Create()调用CWnd::CreateEx()进行创建.但若我在MainFrm.cpp中用class wizard加入Create()函数,调用的应该就是新加入的Create()函数即CMainFrame::Create()函数但事实上这个添加的Create()函数根本没有被调用!我觉得我叙述得够详细的了。有谁能够解释一下!!!!!![/color][/color][/color][/color][/color][/color][/color][/color]
CMainFrame* pMainFrame = new CMainFrame;(CMainFrame当然是从CMDIFrameWnd派生而来的啦),然后pMainFrame->LoadFrame()这里的LoadFrame()是CMDIFrameWnd类的。而CMDIFrameWnd::LoadFrame()又会调用CFrameWnd::LoadFrame(),再由LoadFrame()去调用Create函数,到底调用哪一个Create()呢?由于Create函数是虚函数,所以pMainFrame这个指针是决定因素!如果在MainFrm.cpp(CMainFrame类的实现文件)没有重写Create()函数,调用的就是CMDIFrameWnd::Create(),它又是从CFrameWnd中继承过来的。接着CFrameWnd::Create()调用CWnd::CreateEx()进行创建.但若我在MainFrm.cpp中用class wizard加入Create()函数,调用的应该就是新加入的Create()函数即CMainFrame::Create()函数但事实上这个添加的Create()函数根本没有被调用!我觉得我叙述得够详细的了。有谁能够解释一下!!!!!![/color][/color][/color][/color][/color][/color][/color][/color]