OnOK() и OnCancel() в VC++

  • Автор темы Автор темы A.D.I.D.A.S
  • Дата начала Дата начала
A

A.D.I.D.A.S

Подскажите пожалуйсто такую вещь:
При создании приложения типа Dialog Based на диалоге сразу есть 2 кнопки - Ok и Cancel. Их конечно можно убрать, но при нажатии на Enter и ESC все равно срабатывают методы OnOK() и OnCancel()... Как от этого избавится(т.е. чтобы при нажатии этих кнопок ничего не происходило)?
 
Когда создашь класс твоего диалога, сразу же, НЕ МЕНЯЯ ИДЕНТИФИКАТОРЫ КНОПОК, создай функции обработки их нажатия (надеюсь знаешь как :) ). После этого удали весь код из этих кнопок (там будет что то типа
Код:
CDialog::onCancel и CDialog::onOk)
. Вот и все!
Или можешь поставить заглушку - вместо
Код:
CDialog::onCancel
написать
Код:
TRACE("CMyDialog::onCancel\n");

Юзайте тег
Код:
 и не будет смайлов![/size][/color]
 
Спасибо! А вот смайлики вместо некоторых симовлов С++-кода это прикольно=))) :unsure:
 
И еще: как создать переменные определенного типа, чтобы в них сразу содержались значения элементов диалога(Edita допустим). Я умею так:
//m_edit - control variable
CString s;
m_edit.GetWindowText(s);

Знаю, что можно объявить переменную m_edit типа CString и в ней будет содержаться текст из Edit'а, но не знаю как...
 
Попробовал убрать код из функций обработки этих кнопок, а затем и удалить эти кнопки. Теперь при нажатии на Enter и ESC ничего не происходит, но беда в том, что она перестала реагировать на ALT+F4 и вообще как-либо закрываться(кроме CTRL+ALT+DELETE конечно :unsure: ) Заглушка дает тот же эффект...
 
Видимо, тебе надо что-нибудь про MFC почитать сначала.
Для связи переменной и едита смотри DDX_Text.

Чтобы убрать стандартную реакцию на ESC - надо отсечь его в PretranslateMessage, наверное, но я никогда так не делал - и тебе не советую. Если ты пишешь что-либо серьезнее домашнего задания, не стоит мешать пользователю закрывать диалог так как он привык.
 
Почитайка ты лучше "Программирование на Visual C++ 6.0" Круглински, Уингоу и Шеферд - и все старые вопросы отпадут. Но появятся новые ;) !
 
A.D.I.D.A.S
Попробовал убрать код из функций обработки этих кнопок, а затем и удалить эти кнопки. Теперь при нажатии на Enter и ESC ничего не происходит, но беда в том, что она перестала реагировать на ALT+F4 и вообще как-либо закрываться(кроме CTRL+ALT+DELETE конечно ) Заглушка дает тот же эффект...
Греби в сторону WM_KEYDOWN. Создай событие и вылавливай какие-хочешь клавиши
 
Греби в сторону WM_KEYDOWN. Создай событие и вылавливай какие-хочешь клавиши
Уж слишко м ты глубоко копать предлагаешь. Лучше, ІМХО конечно, WM_CLOSE обработать, а в функцию обработчика добавить
Код:
CDialog::EndDialog(0);
CDialog::OnClose();
У меня так работает и ноу проблемс! ;)
 
iktomy
А WM_CLOSE как генерить? Точнее, кто генерить будет? Вы это читали:
Попробовал убрать код из функций обработки этих кнопок, а затем и удалить эти кнопки. Теперь при нажатии на Enter и ESC ничего не происходит, но беда в том, что она перестала реагировать на ALT+F4 и вообще как-либо закрываться(кроме CTRL+ALT+DELETE конечно ) Заглушка дает тот же эффект...
iktomy
Интересно и как вы ESC отрабатываете?
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab