帮帮忙!MDI里文档和视的苦恼问题!

Newor 2003-03-22 10:40:30
我的MDI里定义两个视图类,单文档。我想程序运行时始终打开这两个视图,并能切换这两个视图的焦点,怎么办?
在Jorge Lodos的下面代码中,切换时只能替换原来的视图,没有切换。
CView* CMyDocument::SwitchToView(CView* pNewView)
{
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();

// Set flag so that document will not be deleted when view is dettached.
BOOL bAutoDelete = m_bAutoDelete;
m_bAutoDelete = FALSE;
// Dettach existing view
RemoveView(pOldActiveView);
// restore flag
m_bAutoDelete = bAutoDelete;

// Show the newly active view and hide the inactive view.
pNewView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE);

// Attach new view
AddView(pNewView);

pChild->RecalcLayout();
pNewView->UpdateWindow();
pChild->SetActiveView(pNewView);
return pOldActiveView;
}

大家帮忙看看:http://www.codetools.com/docview/switchingviews.asp
...全文
31 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
捕鲸叉 2003-03-22
  • 打赏
  • 举报
回复
可以使用 zhdleo(叮东) 的方法
CFrameWnd::SetActiveView
void SetActiveView( CView* pViewNew, BOOL bNotify = TRUE );

例子代码如下:

//The SwitchView function is included here as a reference.

CView* CVswapApp::SwitchView( UINT nIndex )
{
ASSERT( nIndex >=0 && nIndex < NUMVIEWS );

CView* pNewView = m_pViews[nIndex];

CView* pActiveView =
((CFrameWnd*) m_pMainWnd)->GetActiveView();

if ( !pActiveView ) // No currently active view.
return NULL;

if ( pNewView == pActiveView ) // Already there.
return pActiveView;

// Update Doc's data if needed
// Don't change view if data validation fails
if ( ! SaveActiveViewsData() )
{
return pActiveView;
}

m_nCurView = nIndex; // Store the new current view's index.

// Exchange view window ID's so RecalcLayout() works.
UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID);
::SetWindowLong(pActiveView->m_hWnd, GWL_ID,
::GetWindowLong(pNewView->m_hWnd, GWL_ID));
::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp);

// Display and update the new current view - hide the old one.
pActiveView->ShowWindow(SW_HIDE);
pNewView->ShowWindow(SW_SHOW);
((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView);
((CFrameWnd*) m_pMainWnd)->RecalcLayout();
pNewView->Invalidate();
return pActiveView;
}

zhdleo 2003-03-22
  • 打赏
  • 举报
回复
直接设置当前视图不行吗??

两个视图,两个不同的指针,当你需要设置的时候,
SetActiveView不行吗???

应该可以的呀。
GoogleGeek 2003-03-22
  • 打赏
  • 举报
回复
帮你看一下!
mdi中切换视图应该很简单的!
您怎么了?

15,978

社区成员

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

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