CDialog не закрывается при сопоставлении двух кнопок

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 () по какой-то причине заменяет нормальное поведение закрытия диалогового окна.

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


person Community    schedule 12.01.2009    source источник
comment
что произойдет, если вы нажмете на вторую кнопку? Вызывается Baz ()?   -  person JohnIdol    schedule 12.01.2009


Ответы (1)


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

person Stu Mackellar    schedule 12.01.2009