我现在做一个MDI,其中的视图被分割为三部分,一行两列,第二列再分为两行一列,在一行一列这个地方(CView),放一个树Cmytree(CTreeCtrl类).
****************
CView*
*CFormView
*
**********
*
***************现在想要做的是:双击某一个叶子,在CFormView这个地方会显示不同的视图.
****************
CView*
*CFormView
*
**********
*
***************现在想要做的是:双击某一个叶子,在CFormView这个地方会显示不同的视图.
OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
函数 然后得到选中的树节点
在得到CFormView的指针进行相应操作即可
所以,最好的就是切换视图.上面给你的链接就是用来做这个的.
{ CView *pOldActiveView=GetActiveView();
CView *pNewActiveView=(CView*)GetDlgItem(nForm); if(pNewActiveView==NULL)
{
if(nForm==IDD_LIBRARY_FORM)
{
pNewActiveView=(CView*)new CLibraryView;
}
if(nForm==IDD_BOOKINFO_FORM)
{
pNewActiveView=(CView*)new CBookInfoView;
}
if(nForm==IDD_PROVIDER_FORM)
{
pNewActiveView=(CView*)new CProviderView;
} CCreateContext context;
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,nForm,&context);
pNewActiveView->OnInitialUpdate();
} SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE); int ID; if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CLibraryView))
ID=IDD_LIBRARY_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CBookInfoView))
ID=IDD_BOOKINFO_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CProviderView))
ID=IDD_PROVIDER_FORM; pOldActiveView->SetDlgCtrlID(ID);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout();}
SwitchToForm(int nForm)看上面的代码,不太明白,我的 例子要切换视图的地方上Formview
能不能解释一下上面的函数,我看不明白啊!
在CChildFrame里定义一个视图切换函数,
ChangeView(int n),在
void Cmytree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{...
paritem=this->GetParentItem(curitem);
pChild->ChangeView(0);
.......}
里跳到ChangeView函数内部,
void CChildFrame::ChangeView(int n)
{
CSplitterWnd * wndSplitter1;
CChildFrame * pChild = (CChildFrame*)AfxGetMainWnd();
wndSplitter1=&pChild->SplitterWnd02;
wndSplitter1->DeleteView(0,0);
if(n==0)
{
wndSplitter1->CreateView(0,0,RUNTIME_CLASS(CEPoint),CSize(100,300),NULL);
}
else if (n==1)
{
wndSplitter1->CreateView(0,0,RUNTIME_CLASS(CCMaster),CSize(100,300),NULL);
}
else if (n==2)
{
wndSplitter1->CreateView(0,0,RUNTIME_CLASS(CCSlave),CSize(100,300),NULL);
} wndSplitter1->RecalcLayout();}
但是执行到
wndSplitter1->DeleteView(0,0);
这一步就出错了,哪位高手告诉我该怎么写?出错信息为:access violation
wndSplitter1->DeleteView(0,0);我看到论坛上有建议用隐藏,具体怎么实现的呀?