Jochen Arndt
Создайте шаблон диалогового окна с помощью редактора ресурсов, как обычно, и создайте CDialog
основанный класс для него.
Добавить int
член класса dialog для вашего таймера и прототипа обработчика событий таймера:
class CMyAlertBox : public CDialog
{
// Wizard generated code here
protected:
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnTimer(UINT nIDEvent);
int m_nTimer;
};
Запустите таймер в
OnInitDialog()
:
BOOL CMyAlertBox::OnInitDialog()
{
BOOL bRet = CDialog::OnInitDialog();
m_nTimer = SetTimer(1, delayTime, NULL);
return bRet;
}
Реализуйте обработчик таймера, когда диалоговое окно просто закрывается:
void CMyAlertBox::OnTimer(UINT /*nIDEvent*/)
{
EndDialog(IDOK);
}
Изменение
OnClose()
чтобы отключить таймер (диалоговое окно все еще может быть закрыто нажатием ESC, Alt+F4 или с помощью кнопки X close):
void CMyAlertBox::OnClose()
{
if (m_nTimer)
{
KillTimer(m_nTimer);
m_nTimer = 0;
}
CDialog::OnClose();
}
Вышесказанное относится к модальному диалогу, который блокирует ваше приложение:
// Called from any window (usually your main window)
CMyAlertBox *pDlg = new CMyAlertBox(this);
int nRet = pDlg->DoModal();
delete pDlg;
//nRet is IDOK if the time has elapsed or IDCANCEL if closed by the user
Если вы не хотите блокировать приложение, вы должны создать немодальный диалог с помощью переменной-члена в Родительском окне и сообщить родительскому окну, когда диалоговое окно будет закрыто (например, с помощью пользовательского сообщения). Затем вы несете ответственность за уничтожение диалогового окна и его удаление.