Здравствуйте Мыкола, Вы писали:
М>Здравствуйте, уважаемые!
М>Мне тут понадобилась возможность принудительно позакрывать все диалоги в моем приложении. Покопался в форумах, что-то по этому поводу было, но проблемма так и не была решена. Набросал такую функцию:
Делай так
#define WM_KILLDIALOG (WM_APP+1)
{
AfxGetMainWnd()->PostMessage(WM_KILLDIALOG); // сообщение должно разойтись по всем окнам
}
И в каждый диаложек добавляешь
BEGIN_MESSAGE_MAP( CDialog, CMyDialogN102 )
//{{AFX_MSG_MAP( CMyWnd
// ... Possibly more entries to handle additional messages
ON_MESSAGE(WM_KILLDIALOG,OnKillDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP( )
afx_msg LRESULT CMyDialogN102::OnKillDialog(WPARAM, LPARAM)
{
if(m_bModal)
{
// Тут его прибиваем
}
}
Еще нужно переопределить метод DoModal — он виртуальный
int CMyDialogN102::DoModal()
{
int iRet; // это чтоб можно было диалог юзать и модально, и немодально
m_bModal = TRUE;
CDialog::DoModal();
return iRet;
}
Ну и в заголовочный файл добавить соответствующие описания методов и BOOL m_bModal;