CDialog не закрывается, когда две кнопки отображаются - PullRequest
1 голос
/ 12 января 2009

Visual Studio 2005, C ++, Windows XP.

У меня есть CDialog с одной кнопкой, которая вызывает такую ​​функцию:

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg inherits from CDialog
    ON_BN_CLICKED(IDBAR, Bar)
END_MESSAGE_MAP()

Диалоговое окно закрывается при нажатии кнопки «X».

Я изменяю вышеуказанный код на:

BEGIN_MESSAGE_MAP(Foo, BaseDlg) //BaseDlg inherits from CDialog
    ON_BN_CLICKED(IDBAR, Bar)
    ON_BN_CLICKED(IDBAZ, Baz)
END_MESSAGE_MAP()

Мое диалоговое окно больше не будет закрываться. Всякий раз, когда нажимается X, вызывается Baz (). Второй обработчик ON_BN_CLICKED () по какой-то причине заменяет нормальное поведение закрытия диалога.

Как закрыть диалоговое окно, в котором две или более кнопок сопоставлены с функциями?

1 Ответ

3 голосов
/ 12 января 2009

Какие числовые значения присвоены IDBAR и IDBAZ в файле ресурсов? Одним из возможных объяснений является то, что IDBAZ == IDCANCEL, который по умолчанию определен в MFC как идентификатор для кнопок отмены и X диалога. Определение собственного обработчика для этой константы затем переопределит поведение по умолчанию, которое заключается в закрытии окна. Это применимо только в том случае, если вы показываете диалоговое окно модально - если оно немодально, вам всегда нужно закрывать диалоговое окно самостоятельно, вызывая EndDialog ().

...