新增加一个View类,在该类中使用GetDocument()时为什么要(C***Doc*)GetDocument()?

解决方案 »

  1.   


    C***Doc是你的文档类型吧,比如可能是CMyDoc啊什么的。
    因为默认的viewGetDocument()函数返回的是的CDocument*类型,所以要么在你的view类里重载GetDocument()让它返回你定义的documnet类,要么在所有调用GetDocument()的地方进行强制类型转换,以使用你的document类的特定方法。如果你取这个指针,要使用的是CDocument类的成员函数,那么这个类型转换也不必要
      

  2.   

    GetDocument的原形是这样的:CDocument* GetDocument( ) constView中的GetDocument无非是加了一个类型转换而已,没什么大不了的。
      

  3.   

    为什么由框架产生的view类不需要进行强制转换也可以使用document类的特定方法?
      

  4.   

    不会呀,我的好使呀:)
    是不是因为你调用的是你的文档类自己定义的函数,而你定义的GetDocument()返回的是CDocument*,所以就得要强制转换一下啦:)
      

  5.   

    你看看框架类产生的View类里面定义的GetDocument是怎么写的,见下(设你的文档类是CMyDocument):
    CMyDocument* GetDocument();
    知道了吧,人家在做的时候已经把返回值做成你的文档类了,强制转换已经在GetDocument里实现了:)
    祝你好运吧:)
      

  6.   

    所以你重载GetDocument的时候可以按照人家的思路做一个:)
    CMyDoc* CSDIView::GetDocument() 
    {
    return (CMyDoc*)m_pDocument;
    }