我在做是实验的时候遇到一个单文档多视图的情况,于是在网上找资料,找到一个实例,但好明显有一些错误,希望高手指教,不胜感激。
     此sdi程序主要是利用菜单来切换不同的视图,3个视图的基类都是CFromView。
主要代码如下:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND_RANGE(ID_VIEW1, ID_VIEW3, onchange)        //ID_VIEW为菜单的ID
ON_UPDATE_COMMAND_UI_RANGE( ID_VIEW1, ID_VIEW3, onupdatechangeUI ) ON_COMMAND(ID_VIEW1, &CMainFrame::OnView1)
ON_COMMAND(ID_VIEW2, &CMainFrame::OnView2)
END_MESSAGE_MAP()void CMainFrame::onchange(UINT nID)
{
   if(nID==m_pcurrentview)
   return;
   CView* pOldActiveView=GetActiveView();
   ::SetWindowLong (pOldActiveView->m_hWnd,GWL_ID,m_pcurrentview);
   
   CRuntimeClass* pNewViewClass;   switch(nID)
   {
   case ID_VIEW1:
   pNewViewClass=RUNTIME_CLASS(CView1);
   break;
   case ID_VIEW2:
    pNewViewClass=RUNTIME_CLASS(CView2);
   break;
       case ID_VIEW3:
   pNewViewClass=RUNTIME_CLASS(CView3);
   break;
   default:
           ASSERT(0);
   return;
   }   CCreateContext context;
   context.m_pNewViewClass=pNewViewClass;
   context.m_pCurrentDoc=GetActiveDocument();
   CView* pNewView=STATIC_DOWNCAST(CView,CreateView(&context));   if(pNewView!=NULL)
   {
   pNewView->ShowWindow (SW_SHOW);
   pNewView->OnInitialUpdate();
   SetActiveView(pNewView);
   RecalcLayout();
       m_pcurrentview=nID;
   pOldActiveView->DestroyWindow();
   ardfa.m_hActiveView=GetActiveView()->m_hWnd;   //ardfa不知道是什么
   }
}void CMainFrame::onupdatechangeUI(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(pCmdUI->m_nID=m_pcurrentview);
}
此处的ardfa不知道是什么,之前未定义的。实例中也没有提及,我估计应该是一个自定义的类对象。请问各位高手,应该怎样定义ardfa才能使程序正常运行呢?还有,我要在菜单的消息处理中怎样调用onchange和onupdatechange函数才能转换视图呢?本人菜鸟,不胜感激!

解决方案 »

  1.   

    注掉看看,从这段代码中看不出有什么用。
      

  2.   

    编译的时候说这是个未定义标识符。我想看看需要如何去定义它才能使程序正常运行
      

  3.   

    您好
    我是本版版主
    此帖已多日无人关注
    请您及时结帖
    如您认为问题没有解决可按无满意结帖处理
    另外本版设置了疑难问题汇总帖
    并已在版面置顶
    相关规定其帖子中有说明
    您可以根据规定提交您帖子的链接
    如您目前不想结帖只需回帖说明
    我们会删除此结帖通知见此回复三日内无回应
    我们将强制结帖
    相关规定详见界面界面版关于版主结帖工作的具体办法