CMultiDocTemplate* pUniteDocTemplate;     //新增加的
pUniteDocTemplate = new CMultiDocTemplate(
IDR_UNITETYPE,
RUNTIME_CLASS(CUniteDoc),
RUNTIME_CLASS(CMDIChildWnd), // custom MDI child frame
RUNTIME_CLASS(CUniteView));
AddDocTemplate(pUniteDocTemplate); CMultiDocTemplate* pDocTemplate;   //原有的
pDocTemplate = new CMultiDocTemplate(
IDR_HITYPE,
RUNTIME_CLASS(CHiDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CHiView));
AddDocTemplate(pDocTemplate);在切换文档时,是用标签方式切换的,当在选择不同类型的文档时出问题!
void CWindowTabCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) //标签方切换函数
{
  CMDIChildWnd* pChild=(CMDIChildWnd*)GetActiveFrame();
  //请问在这里怎样分辨出是(CHiDoc)文档和(CUniteDoc)文档,从而得到该激活文档的指针?
  CHiDoc * pDoc=(CHiDoc *)pChild->GetActiveDocument();
}

解决方案 »

  1.   

    可否写两行代码来看看!!!
    CMDIChildWnd* pChild=(CMDIChildWnd*)GetActiveFrame(); 
      //请问在这里怎样分辨出是(CHiDoc)文档和(CUniteDoc)文档,从而得到该激活文档的指针? 
      CDoc * pDoc=pChild->GetActiveDocument(); 
    怎样分辨pDoc是什么类型的指针??
      

  2.   


    #include "stdafx.h"
    #include <iostream>
    using namespace std;class Base
    {
    public:
    virtual ~Base()
    {
    }
    };
    class D1:public Base
    {
    };
    class D2:public Base
    {
    };
    int main()
    { D1 *pD1 = new D1;
    D2 *pD2 = new D2; Base* p=pD2; if(   NULL != dynamic_cast<D1*>(p) )
    cout<<"p实际指向D1类型"<<endl;
    else if( NULL != dynamic_cast<D2*>(p) ) cout<<"p实际指向D2类型"<<endl;
    else
    cout<<"p指向未知类型"<<endl; return 0;
    }
      

  3.   


    CDocument * pDoc=GetActiveDocument();     CRuntimeClass* prt = pDoc->GetRuntimeClass();
        if( strcmp( prt->m_lpszClassName, "CMy123Doc" )  == 0 )
    AfxMessageBox("prt指向CMy123Doc对象");
      

  4.   

    请问这个方法和楼上的有什么差别,那个好一点?
    CDocument * pDoc=GetActiveDocument(); 
    if(pDoc->IsKindIF(RUNTIME_CLASS(HiDoc))
    {
      HiDoc* pHiDoc=(HiDoc*)pDoc;
    }