Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Eugeny
Зарегистрирован: 01.02.2005 Сообщения: 40
|
Добавлено: Чт Фев 02 2006 11:21 Заголовок сообщения: Проблемка с CDialog (MFC) |
|
|
Как предотвратить закрытие окна диалога, производного от CDialog (MFC) при нажатии Enter'a. Создаю приложение главным окном которого является диалоговое окно, естественно мне не нужно чтобы по Enter'у оно закрывалось.
Пробовал в методе InitInstance сменить способ создания и вывода диалога с DoModal() на Create() и ShowWindow().
Не помогло... |
|
Вернуться к началу |
|
|
September
Зарегистрирован: 14.11.2004 Сообщения: 109 Откуда: Saint-Petersburg
|
Добавлено: Чт Фев 02 2006 12:27 Заголовок сообщения: |
|
|
На сколько я помню, по умолчанию вы получаете фокус на кнопку "ОК", следовательно нажатие Ентера влечет за собой обработку кнопки "ОК".
Варианты - либо меняем фокус, либо глушим обработку MB_OK своим кодом. Могу ошибаться, Вижал запускал последний раз больше года назад 8(( _________________ Соре за громотишескее ашипки |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Чт Фев 02 2006 17:44 Заголовок сообщения: Re: Проблемка с CDialog (MFC) |
|
|
Eugeny писал(а): | Как предотвратить закрытие окна диалога, производного от CDialog (MFC) при нажатии Enter'a. Создаю приложение главным окном которого является диалоговое окно, естественно мне не нужно чтобы по Enter'у оно закрывалось.
Пробовал в методе InitInstance сменить способ создания и вывода диалога с DoModal() на Create() и ShowWindow().
Не помогло... |
По дороге путешествия сигнальчика типа OnClose ставите в визарде обработчик и НЕ вызываете у базового соответствующий метод...
Например на клавише окей нажатый ентер - вызовет обработчик OnOK. Дык в нём не нужно вызывать базовый.
Как тут уже прозвучало - не всегда фокус ввода будет на той или иной кнопке. Посему приведённый выше пример - лишь пример прохождения события. А не руководство к действию.
с уважением
(круглый) |
|
Вернуться к началу |
|
|
Eugeny
Зарегистрирован: 01.02.2005 Сообщения: 40
|
Добавлено: Вт Фев 07 2006 14:31 Заголовок сообщения: |
|
|
Даже если в диалоге нет ни одиной кнопки и в методе OnClose не вызывать базовый CDialog::OnClose() все равно закрывается по Ентеру |
|
Вернуться к началу |
|
|
DmitryShm
Зарегистрирован: 17.11.2003 Сообщения: 211 Откуда: Казань
|
Добавлено: Вт Фев 07 2006 18:40 Заголовок сообщения: OkButton |
|
|
Есть такая вещь, как DialogResult. Кнопка Ok по дефолту на форме -- это OkButton. Т.е. по ее нажатию у DialogResult будет Ok. Есть также по дефолту кнопка Cancel. При ее нажатии у формы задается CancelResult. При установке Result формы она закрывается. Кнопка OkButton всегда будет в фокусе на форме. Это логика такая. Если хотите изменить логику, то просто уберите все OkButton-ы с формы. Создайте новую унопку вместо уничтоженной OkButton, либо снимите соответствующее свойство с кнопки Ok, делающее ее OkButton. _________________ love IT |
|
Вернуться к началу |
|
|
Eugeny
Зарегистрирован: 01.02.2005 Сообщения: 40
|
Добавлено: Ср Фев 08 2006 08:16 Заголовок сообщения: |
|
|
А ларчик просто открывался
Даже если в диалоге нет ни одной кнопки, ID_OK и ID_CANCEL все равно есть (так по всей видимости устроен класс).
Действительно если в обработчике OnOK не вызывать базовый то диалог не закрывается!!!
Большое спасибо kolobok0, он мне сразу дело подсказал, я просто не въехал вначале |
|
Вернуться к началу |
|
|
|