单文档多视图的实现的疑问

stelongleung 2010-08-23 12:46:25
我在做是实验的时候遇到一个单文档多视图的情况,于是在网上找资料,找到一个实例,但好明显有一些错误,希望高手指教,不胜感激。
此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函数才能转换视图呢?本人菜鸟,不胜感激!
...全文
57 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-09-18
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
stelongleung 2010-08-23
  • 打赏
  • 举报
回复
编译的时候说这是个未定义标识符。我想看看需要如何去定义它才能使程序正常运行
dinjay 2010-08-23
  • 打赏
  • 举报
回复
注掉看看,从这段代码中看不出有什么用。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧