MDI程序,单击一个菜单项(假设为菜单a)弹出个FormView
因为是MDI程序,有很多view,我想让菜单a的FormView只创建一次,并且当再次单击菜单a时可以把它对应的FormView激活,请问如何实现?下面这个是创建View的函数
void CMainFrame::OnMemberManage()
{
m_pMemberManage = new CChildFrame();
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CMemManageView);
if(!m_pMemberManage->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW|FWS_PREFIXTITLE,this,&context))
return;
m_pMemberManage->InitialUpdateFrame(NULL,TRUE);
m_pMemberManage->ShowWindow(SW_SHOWMAXIMIZED);
}
因为是MDI程序,有很多view,我想让菜单a的FormView只创建一次,并且当再次单击菜单a时可以把它对应的FormView激活,请问如何实现?下面这个是创建View的函数
void CMainFrame::OnMemberManage()
{
m_pMemberManage = new CChildFrame();
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CMemManageView);
if(!m_pMemberManage->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW|FWS_PREFIXTITLE,this,&context))
return;
m_pMemberManage->InitialUpdateFrame(NULL,TRUE);
m_pMemberManage->ShowWindow(SW_SHOWMAXIMIZED);
}
{
if(!bFlag)
{
m_pMemberManage = new CChildFrame();
...
bFlag=true;
保持句柄;
}
else
SendMessage(WM_ACTIVE,(WPARAM)句柄,0) ;// 激活
}关闭这个窗口时bFlag=false;
如何保持view的那个句柄呢?另外按照你说的那么每个view都要设置一个静态bool变量了
可以,在构造函数中,初始化m_pMemberManage为NULL
然后,在OnMemberManage函数中判断,IsWindow(),则直接显示,否则,创建VIEW先。
{if(!m_pMemberManage ){
m_pMemberManage = new CChildFrame();
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CMemManageView);
if(!m_pMemberManage->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW|FWS_PREFIXTITLE,this,&context))
return;
m_pMemberManage->InitialUpdateFrame(NULL,TRUE);
m_pMemberManage->ShowWindow(SW_SHOWMAXIMIZED);
}
}
else m_pMemberManage->ShowWindow(SW_SHOWMAXIMIZED);
fvv(守护者) 的方法应该是可行的,但是添加响应WM_CLOSE函数后老是提示错误
采用了YunLion(静静的想) 和 cooldenny(丹の尼) 说的方法。
在构造函数中初始化m_pMemberManage 为NULL,
在MemManageView.cpp添加响应WM_DESTORY消息,把m_pMemberManage赋值为空
((CMainFrame *)AfxGetMainWnd())->m_pMemberManage = NULL;谢谢以上三位。