单文档多视图的实现的疑问
我在做是实验的时候遇到一个单文档多视图的情况,于是在网上找资料,找到一个实例,但好明显有一些错误,希望高手指教,不胜感激。
此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函数才能转换视图呢?本人菜鸟,不胜感激!