soul.at.peace Ответов: 3

Как создать окно оповещения с таймером в C++/MFC?


У меня есть приложение на основе диалога, в нем мне нужно окно оповещения, которое будет срабатывать, как только я запущу приложение(у меня есть кнопка Пуск).
После того, как я нажму кнопку Пуск, он должен вызвать alertbox с таймером в несколько секунд, и он должен закрыть себя, как только таймер остановится.

Я буду очень благодарен, если кто-то сможет помочь это сделать, я новичок в МФЦ.

Что я уже пробовал:

Попробовал Alertbox ,но не смог получить вещь таймера и кнопки не нужны, чтобы закрыть alertbox, он должен выйти сам, как только таймер остановится.

3 Ответов

Рейтинг:
20

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

Если вы не хотите блокировать приложение, вы должны создать немодальный диалог с помощью переменной-члена в Родительском окне и сообщить родительскому окну, когда диалоговое окно будет закрыто (например, с помощью пользовательского сообщения). Затем вы несете ответственность за уничтожение диалогового окна и его удаление.


CPallini

5.

Рейтинг:
2

Richard MacCutchan

Взгляните на это Диалоговое Окно Задачи (Windows)[^].


CPallini

Ух ты, что-то новенькое (для меня).
5.

Richard MacCutchan

Спасибо, это довольно классный контроль.

Рейтинг:
2