关于如何在mdi程序的视中得到模板中view和doc的指针?挺难的

minli10001 2004-01-17 04:10:02
我建立了一个view,一个doc,然后创建了一个文档模板,我在mdi程序中新建的时候打开这个视,然后我往里添加一个对话框资源,这个对话框是从CFormView继承来的,我在对话框的类中如何午到那个模板中的view和doc的指针?多谢,解决再加分。
...全文
54 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
memory_xj 2004-08-17
  • 打赏
  • 举报
回复
在CMainFrame响应命令消息打开对话框的话,
CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

// Get the active MDI child window.
CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
CMyView *pView = (CMyView *) pChild->GetActiveView();

在构造对话框时将这个指针传递给对话框。如CMyDialog dlg(pView);
老夏Max 2004-08-17
  • 打赏
  • 举报
回复
Mark
yintongshun 2004-01-17
  • 打赏
  • 举报
回复
切换视图的时候得到文档就行,下面这个函数用时:
CRuntimeClass* pNewViewClass;
pNewViewClass= RUNTIME_CLASS(CFormSettingsView);
CNetObserverDoc* doc=(CNetObserverDoc*)GetDocument();
ASSERT(doc);
if (!doc->SwitchToView(pNewViewClass))
TRACE("SwitchToView failed !!!\n");
else
TRACE("SwitchToView successful !!!\n");

BOOL CNetObserverDoc::SwitchToView(CRuntimeClass *pNewViewClass)
{
int row, col;
row=0;col=1;
CMDIFrameWnd* pMainWnd = (CMDIFrameWnd*)AfxGetMainWnd();
// Get the active MDI child window.
CMDIChildWnd* pChild = (CMDIChildWnd*)pMainWnd->MDIGetActive();
// Get the active view attached to the active MDI child window.
CView* pOldActiveView = pChild->GetActiveView();
CSplitterWnd* pSplitter = (CSplitterWnd *)pOldActiveView->GetParent();
// ASSERT(pSplitter->IsChildPane(pOldActiveView, row, col));


pOldActiveView=(CView*)pSplitter->GetPane(row,col);
// If we're already displaying this kind of view, no need to go further.
if (pOldActiveView->IsKindOf(pNewViewClass))
return TRUE;

CRect viewrect;
pOldActiveView->GetWindowRect(&viewrect);

// set flag so that document will not be deleted when view is destroyed


m_bAutoDelete = FALSE;
// Delete existing view
pOldActiveView->DestroyWindow();
// pOldActiveView->
m_bAutoDelete=TRUE;

// set flag back to default




// Create new view
CCreateContext context;
context.m_pNewViewClass = pNewViewClass;
context.m_pCurrentDoc = this;

// POSITION pos=::AfxGetApp()->GetFirstDocTemplatePosition();

context.m_pNewDocTemplate =this->GetDocTemplate();// ::AfxGetApp()->GetNextDocTemplate(pos);
context.m_pLastView = NULL;
context.m_pCurrentFrame = NULL;
if (!pSplitter->CreateView(row, col, pNewViewClass, viewrect.Size(),
&context))
return FALSE;
CView* pNewView = (CView *)pSplitter->GetPane(row, col);
pNewView->OnInitialUpdate();
// Set active

pSplitter->GetParentFrame()->SetActiveView(pNewView);

pSplitter->RecalcLayout();
pNewView->SendMessage(WM_PAINT);
return TRUE;
}
在Form视图中得到文档:CNetObserverDoc *pNDoc=(CNetObserverDoc *)GetDocument();

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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