WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Как закрыть окно в приложении с двумя видами?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Как закрыть окно в приложении с двумя видами?
Bober опубликован 24-05-2001 06:09 MSK   Click Here to See the Profile for Bober   Click Here to Email Bober  
Профессионалы, подскажите! Два Вида у документа. По команде активный Вид нужно закрыть. Такой код не работает:
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     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
У меня один вопрос
у тебя 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     Click Here to See the Profile for Bober  Click Here to Email Bober     
У меня 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     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Если CChildFrame содержит только один вид,
то закрывай CChildFrame .
В любом случае посмотри исходники MFC.
Найди какая функция(ции) вызывают
CDocument::RemoveView
Потом найди какие функции или сообщения вызывают те функции, которые вызывают
CDocument::RemoveView.
Ну а потом найди способ как вызвать те функции MFC(доступного уровня), которые
прямо или косвенно вызывают RemoveView.
Bober опубликован 28-05-2001 19:41 MSK     Click Here to See the Profile for Bober  Click Here to Email Bober     
Спасибо за помощь!!!

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.