我将SDI分成几个窗口,然后想用CMetaFileDC类在子窗口里面保存划线,然后在CMainFrame菜单添加TestLine项,消息映射事件如下:void CMainFrame::OnTestLine() 
{
CHydroOfficeDoc* pDoc=GetActiveView()->GetDocument();//????????? CView* pView;
pView=GetActiveView(); CDC* pDc;
pDc=pView->GetDC();
pDc->MoveTo(10,0);
pDc->LineTo(200,100);
pDoc->pMetaFileDc1->MoveTo(10,0);
pDoc->pMetaFileDc1->LineTo(200,100);
}
有问号的地方出错:
C:\Documents and Settings\Administrator\桌面\HydroOffice\Hydro Office\MainFrm.cpp(305) : error C2440: 'initializing' : cannot convert from 'class CDocument *' to 'class CHydroOfficeDoc *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast我知道是因该将
CHydroOfficeDoc* pDoc=GetActiveView()->GetDocument();
改为:
CDocument* pDoc=GetActiveView()->GetDocument();
问题是:
我如果这样改了,就找不到pMetaFileDc1(注:是CMetaFileDc 类)了,请问:
我该如何改呢?

解决方案 »

  1.   

    或者换一个提法:我将SDI划分成几个窗口;
    我在MainFrame菜单添一项“划线“
    我需要实现的是,点击该项,则在其中某一个窗口划一条线,而且无论怎么变换窗口的大小,这条线都不会消失,要用到CMetaFileDC类。
    有人说在ONDraw(CDC* pDc)方法里面有数组重画,但就我所知这不是一个好的方法,将其保存到CMetaFileDC中进行元文件的重放是比较好的,但我不知道怎么实现。
      

  2.   

    强制类型转换:
    CHydroOfficeDoc* pDoc=(CHydroOfficeDoc*)GetActiveView()->GetDocument();
      

  3.   

    Hendy_So(横笛)正解。CHydroOfficeDoc* pDoc = =(CHydroOfficeDoc*)GetActiveView()->GetDocument();CView* pView;
    pView=GetActiveView();但看不出来这几句有啥用。
      

  4.   

    CHydroOfficeDoc* pDoc = =(CHydroOfficeDoc*)(GetActiveView()->GetDocument());