Автор
|
Тема: Как закрыть окно в приложении с двумя видами?
|
Bober |
опубликован 24-05-2001 06:09 MSK
Профессионалы, подскажите! Два Вида у документа. По команде активный Вид нужно закрыть. Такой код не работает: void CMainFrame::OnWindowDelete() { CMDIFrameWnd *pFrame = (CMDIFrameWnd *)AfxGetApp()->m_pMainWnd; CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame(); CMyView *pView = (CMyView *) pChild->GetActiveView(); if (pView) pView->DestroyWindow(); }
|
OlegN
|
опубликован 24-05-2001 13:46 MSK
У меня один вопрос у тебя CMDIChildWnd содержит несколько CView ? или документ имеет несколько CMDIChildWnd которые содержат по одному CView ? В любом случае поробуй посылать WM_CLOSE активному CView или CMDIChildWnd а потом вызывать UpdateWindow() у parent окна. Приблизительно так: if (pView) pView->SendMessage(WM_CLOSE, 0, 0); pFrame->UpdateWindow();Также нужно вызвать функцию CDocument::RemoveView если она автоматически не будет вызвана в обработчике CView при WM_CLOSE
|
Bober
|
опубликован 25-05-2001 10:43 MSK
У меня MDI приложение. Плюс у Документа два качественно разных Вида. В некоторый момент времени (на экране, допустим, три окна одного Вида и два окна другого Вида) мне надо просто закрыть активное окно. Оно может быть как одного Вида, так и другого (я не знаю, может это важно). Но закрыть не вручную, а программно. Вроде бы ерунда, а не получается. Побовал вот так вот, то же че-то не работает:void CMainFrame::OnDelete() { CMainFrame* pFrame= (CMainFrame*)AfxGetApp()->m_pMainWnd; CChildFrame* p_child_frame = (CChildFrame*)pFrame->GetActiveFrame(); CReportView* pV = (CReportView*) p_child_frame->GetActiveView(); if(pV) { pV->SendMessage(WM_CLOSE, 0, 0); pFrame->UpdateWindow(); CDocument *pDoc = p_child_frame->GetActiveDocument(); pDoc->RemoveView(pV); } } |
OlegN
|
опубликован 25-05-2001 12:23 MSK
Если CChildFrame содержит только один вид, то закрывай CChildFrame . В любом случае посмотри исходники MFC. Найди какая функция(ции) вызывают CDocument::RemoveView Потом найди какие функции или сообщения вызывают те функции, которые вызывают CDocument::RemoveView. Ну а потом найди способ как вызвать те функции MFC(доступного уровня), которые прямо или косвенно вызывают RemoveView. |
Bober
|
опубликован 28-05-2001 19:41 MSK
Спасибо за помощь!!! |