我在做是实验的时候遇到一个单文档多视图的情况,于是在网上找资料,找到一个实例,但好明显有一些错误,希望高手指教,不胜感激。
此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函数才能转换视图呢?本人菜鸟,不胜感激!
此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函数才能转换视图呢?本人菜鸟,不胜感激!
解决方案 »
- 我用ShellExecute能打开exe 还有txt,但是打不开pdf ?
- Vc的组件访问的问题
- 如何用LineTo 画直线和箭头?
- Media player控件如何支持p2p音乐播放
- 高分求 xp ddk ,请大侠帮忙
- 使用ado访问数据库--多表查询 的问题 !请赐教
- 创建ATL工程的时候,选择的是不支持MFC, 现在要使用MFC 中的CMapStringToString , 怎么办? 如何设置为支持MFC. 我不会使用 STL 的 map ,而
- 高分求教简单问题关于CallNextHookEx的?
- 请教怎么样将列表控件中的项目取出来当作整数用
- 请教一些关于在VC中调用COM组件的问题,如何调用?如何使用
- gdi+ 绘制背景图问题
- 如何让弹出的对话框可以与主对话框互换焦点
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法