怎么从一个类中(它的基类是CWnd)取得文档类中的指针啊????各位好心的拜托了

解决方案 »

  1.   

    CMDIChildWnd* pChild;
    pChild=(CMDIChildWnd*)(m_pMainFrm->GetActiveFrame()); CMme_plusView* pView = reinterpret_cast<CMme_plusView*>(pChild->GetActiveView());
    CMme_plusDoc* pDoc = reinterpret_cast<CMme_plusDoc*>(pChild->GetActiveView()->GetDocument());
      

  2.   

    换成CRSDoc* pDoc=(CRSDoc*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();倒是编译成功了 但是跟踪pDoc指针的到是0x00000000, CFrameWnd::GetActiveDocument returned 0x00000000 {CDocument} 返回的不是CRSDoc的文档指针啊 晕……还有什么方法么????
      

  3.   

    还有我用这个方法CRSDoc* pDoc=((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();试了 出现这个D:\vc++\MyProjects1\复件 RS\复件 RS\RSView.cpp(435) : error C2440: 'initializing' : cannot convert from 'class CDocument *' to 'class CRSDoc *'错误 应该怎么改啊……??
      

  4.   

    CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument();
      

  5.   

    楼主的是多文档的项目?
    CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument();
      

  6.   

    有错误啊 error C2039: 'GetActiveFrame' : is not a member of 'CWnd'
      

  7.   

    GetActiveFrame()->GetActiveDocument();
      

  8.   

    注意你写的类有没有重载GetDocument()这个函数啊。
    没有的话,那么估计都是会出错的了
    还有你的基类是CVIEW的吗?
    还是直接继承CWND这个也有关系了
      

  9.   

    class CRSView : public CWnd
    {
    // Construction
    public:
    CRSView();
    private:
    // Attributes
    public:
    bool bol;

       // Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CRSView)
    protected:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    //}}AFX_VIRTUAL// Implementation
    protected:
    HICON m_hIcon;
    CRectTracker* m_tracker;public:
    //void Zoom(float fXZoomRatio, float fYZoomRatio);
    void ReadBinary(int i,int j,CString strFileName);
    void ReadBinary(int i,int j,float **z);
    void DrawImage(int x,int y,float z);
    virtual ~CRSView(); // Generated message map functions
    protected:
    //{{AFX_MSG(CRSView)
    afx_msg void OnPaint();
    afx_msg void OnZoomOut();
    afx_msg void OnZoomIn();
    afx_msg void OnPan();
    afx_msg void OnEagle();
    afx_msg void OnSingle();
    afx_msg void OnMultiple(); //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };
    然后我想在CRSView类一个函数里取得文档类的指针,就是:// TODO: Add your message handler code here and/or call default
          //CRSDoc *pDoc=GetDocument();
          //int mouseX=point.x;
      //int mouseY=point.y;
              //自己定义doc类的指针在view获取      pDoc=new CRSDoc;       //pDoc=(CRSDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();
         //CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument();
           //CRSDoc *pDoc;
             if(pDoc!=NULL)
     { int nWidth=pDoc->m_tracker.m_rect.Width();
       int nHeight=pDoc->m_tracker.m_rect.Height();
                     
      //CRSDoc* pDoc=(CRSDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();
              //CRSDoc* pDoc=(CRSDoc*)((CFrameWnd*)AfxGetMainWnd());      //CRSDoc* pDoc=((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();
              //CRect rect(0,0,jy,ix);
              //CRect rectSave(0,0,jy,ix);
      CRect rectSave;
              //获取图形区域矩形对象的大小   
              pDoc->m_tracker.GetTrueRect(rectSave); 
       
              //如果没有点中图形,这时候HitTest将返回-1.这时候产生橡皮条.   
              if(pDoc->m_tracker.HitTest(point)<0)
              {   
                      CRectTracker tracker;   
                      //画橡皮擦   
                      if(tracker.TrackRubberBand(this,point,pDoc->m_bAllowInvert))

                      {   
                              //   下面的工作将用来检查橡皮条的矩形是否与图形区域的矩形相交.   
                              CRect rectT;   
                              //对橡皮条的矩形进行校正.   
                              tracker.m_rect.NormalizeRect();   //   so   intersect   rect   works   
                              //橡皮条区域与图形区域的交叉区域不为空,则将图形区域的调整句柄进行相应   
                            //的设置   
                              if(rectT.IntersectRect(tracker.m_rect,pDoc->m_tracker.m_rect))
      
                              {   
                                      //如果调整句柄位于矩形内部(resizeInside)则将调整句柄设置在矩形的外   
      //部(resizeOutside)   
                                      if(pDoc->m_tracker.m_nStyle&CRectTracker::resizeInside)
        
                                      {   
                                                //去除resizeInside   形式   
                                              pDoc->m_tracker.m_nStyle&=~CRectTracker::resizeInside;
     
                                                //设置resizeOutside形式   
                                              pDoc->m_tracker.m_nStyle|=CRectTracker::resizeOutside;
      
                                      }   
                                      //否则如果调整句柄在外部就将调整句柄放在区域内部   
                                      else   
                                      {   
                                              //   just   use   inside   resize   handles   on   first   time   
                                              pDoc->m_tracker.m_nStyle&=~CRectTracker::resizeOutside;
     
                                              pDoc->m_tracker.m_nStyle|=CRectTracker::resizeInside;
      
                                      }   
                                      //更新所有视图,显示调整后的图形   
                                      pDoc->UpdateAllViews(NULL,(LPARAM)(LPCRECT)rectSave);
                                      pDoc->UpdateAllViews(NULL);

                              }   
                      }   
              }   
              //如果选中了图形区域,则调用Track函数自动处理,同时处理后更新视图即可.   
              else if(pDoc->m_tracker.Track(this,point,pDoc->m_bAllowInvert))
              {   
                      //   normal   tracking   action,   when   tracker   is   "hit"   
                      pDoc->UpdateAllViews(NULL,(LPARAM)(LPCRECT)rectSave);
                      pDoc->UpdateAllViews(NULL);
      
              } 
     }
    CWnd ::OnLButtonDown(nFlags, point);
    }   就是这样的意思啊 我准确的是想取到CRSDoc文档类的指针  各位大虾好心帮帮忙啦 小弟实在有点急呀……
                     
     
      

  10.   

    void CRSView::OnLButtonDown(UINT nFlags, CPoint point) 
      

  11.   


    CTestApp* pApp = ((CTestApp*)(AfxGetApp()));
    POSITION   pos= pApp->GetFirstDocTemplatePosition();   
    CDocTemplate*   pDT = pApp->GetNextDocTemplate(pos);
    pos=pDT->GetFirstDocPosition();   
    CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos); 
    CTestDoc *m_pDoc;
    while (pDoc) 
    {
    if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc))) 
    {
    m_pDoc = (CTestDoc *)pDoc;
    break;
    }
    pDoc=(CTestDoc*)pDT->GetNextDoc(pos);
    }
      

  12.   

    CTestApp* pApp = ((CTestApp*)(AfxGetApp())); 
    POSITION  pos= pApp->GetFirstDocTemplatePosition();  
    CDocTemplate*  pDT = pApp->GetNextDocTemplate(pos); 
    pos=pDT->GetFirstDocPosition();  
    CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos); 
    CTestDoc *m_pDoc; 
    while (pDoc) 

    if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc))) 

    m_pDoc = (CTestDoc *)pDoc; 
    break; 

    pDoc=(CTestDoc*)pDT->GetNextDoc(pos); 
    }
      

  13.   


    CTestApp* pApp = ((CTestApp*)(AfxGetApp())); 
    POSITION  pos= pApp->GetFirstDocTemplatePosition();  
    CDocTemplate*  pDT = pApp->GetNextDocTemplate(pos); 
    pos=pDT->GetFirstDocPosition();  
    CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos); 
    CTestDoc *m_pDoc; 
    while (pDoc) 

    if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc))) 

    m_pDoc = (CTestDoc *)pDoc; 
    break; 

    pDoc=(CTestDoc*)pDT->GetNextDoc(pos); 
    }
      

  14.   

    CRuntimeClass* pClass = RUNTIME_CLASS( CObject );
      

  15.   

    如果是单文档,while循环应该可以不要的。pDoc直接就可以得到指针。
    因为是单文档,GetActiveDocument是没用的。
      

  16.   

    CDocTemplate*  pDT = pApp->GetNextDocTemplate(pos); 这句有错误啊 跟踪的……高手再留步……