У вас должно быть более одного меню.IDR_MAINFRAME
обычно используется, когда документы не открыты, это не тот файл, который вам нужен.
В редакторе ресурсов должно отображаться другое главное меню (не всплывающее меню), идентификатор которого похож на IDR_MyAppTYPE
.Этот идентификатор меню уже должен быть в вашем CWinAppEx
классе:
BOOL CMyApp::InitInstance()
{
...
pDocTemplate = new CMultiDocTemplate(IDR_MyAppTYPE, ...);
...
}
Это меню вашего документа.
Отредактируйте это меню с помощью редактора ресурсов.Добавьте команду "Close all but this"
, и идентификатор команды меню будет выглядеть примерно так: ID_WINDOW_CLOSEALL_BUT_THIS
Вы должны обработать эту команду в CView
производном классе.Пример:
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_WINDOW_CLOSEALL_BUT_THIS, OnCloseAllButThis)
...
END_MESSAGE_MAP()
void CMyView::OnCloseAllButThis()
{
POSITION p1 = AfxGetApp()->GetFirstDocTemplatePosition();
while(p1)
{
CDocTemplate *doctempl = AfxGetApp()->GetNextDocTemplate(p1);
POSITION p2 = doctempl->GetFirstDocPosition();
while(p2)
{
CDocument* doc = doctempl->GetNextDoc(p2);
POSITION p3 = doc->GetFirstViewPosition();
while(p3)
{
CView* view = doc->GetNextView(p3);
if(view && view->GetParentFrame() && view != this)
view->GetParentFrame()->SendMessage(WM_CLOSE);
}
}
}
}