下面这个函数可以动态切换窗体,但其中有一个地方不明白:每次切换都要NEW一个对象,是在什么时候释放的?如果没释放是不是这段代码有BUG?void CMainFrame::SwitchToForm(int nForm)
{
CView* pOldActiveView = GetActiveView();
CView* pNewActiveView = (CView*) GetDlgItem(nForm);
if (pNewActiveView == NULL)
{
if (nForm == IDD_SWITCHFORM_FORM) //每次这里都new,但不见有delete?
pNewActiveView = (CView*)new CSwitchFormView;
if (nForm == IDD_NEXTFORM)
pNewActiveView = (CView*)new CNextFormView;
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(CSwitchFormView))
ID=IDD_SWITCHFORM_FORM;
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CNextFormView))
ID=IDD_NEXTFORM;
pOldActiveView->SetDlgCtrlID(ID);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
RecalcLayout();
}
{
CView* pOldActiveView = GetActiveView();
CView* pNewActiveView = (CView*) GetDlgItem(nForm);
if (pNewActiveView == NULL)
{
if (nForm == IDD_SWITCHFORM_FORM) //每次这里都new,但不见有delete?
pNewActiveView = (CView*)new CSwitchFormView;
if (nForm == IDD_NEXTFORM)
pNewActiveView = (CView*)new CNextFormView;
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(CSwitchFormView))
ID=IDD_SWITCHFORM_FORM;
if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CNextFormView))
ID=IDD_NEXTFORM;
pOldActiveView->SetDlgCtrlID(ID);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
RecalcLayout();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货