我建立了一个多文档程序MyEditor,视图类为滚动视图,然后又添加了一个新的视图CNewView,为CView类型,在前者的OnDraw()函数中语句:CMyEditorDoc* pDoc = GetDocument();没有错误,但在后者也就是CNewView的OnDraw()函数中该语句就是错误的,而应改为:
 CMyEditorDoc* pDoc=(CMyEditorDoc*)GetDocument();
请问这是什么缘故?

解决方案 »

  1.   

    呵呵,这就是Windows的生成程序框架的AppWizard的妙用了,CEditorView的头文件中应该有这样的定义:
    CEditorDoc* GetDocument();
    这就是框架生成的,文档模板做的,呵呵,而你新建的类则没有!
      

  2.   

    《深入浅出MFC》中说的很清楚了,呵呵。当你使用类似下面的:
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CTestSDIDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CTestSDIView));
    AddDocTemplate(pDocTemplate);
    这时候就会在View类中生成一个内联函数GetDocument();并且你可以看到View类没有包含DOC类的头文件。如果你要是将View类的头文件被其他的头文件包含以后就会出错,这时候你需要在View类的头文件中添加包含Doc类的头文件才能解决!
      

  3.   

    你可以在你新生成的View类中,重载GetDocument()函数,在里面将CDocumentDoc类强制转化为CMyEditorDoc指针就可以了。