• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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()... Как от этого избавится(т.е. чтобы при нажатии этих кнопок ничего не происходило)?
 
I

iktomy

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

Юзайте тег
Код:
 и не будет смайлов![/size][/color]
 
A

A.D.I.D.A.S

Спасибо! А вот смайлики вместо некоторых симовлов С++-кода это прикольно=))) :unsure:
 
A

A.D.I.D.A.S

И еще: как создать переменные определенного типа, чтобы в них сразу содержались значения элементов диалога(Edita допустим). Я умею так:
//m_edit - control variable
CString s;
m_edit.GetWindowText(s);

Знаю, что можно объявить переменную m_edit типа CString и в ней будет содержаться текст из Edit'а, но не знаю как...
 
A

A.D.I.D.A.S

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

Guest

Видимо, тебе надо что-нибудь про MFC почитать сначала.
Для связи переменной и едита смотри DDX_Text.

Чтобы убрать стандартную реакцию на ESC - надо отсечь его в PretranslateMessage, наверное, но я никогда так не делал - и тебе не советую. Если ты пишешь что-либо серьезнее домашнего задания, не стоит мешать пользователю закрывать диалог так как он привык.
 
I

iktomy

Почитайка ты лучше "Программирование на Visual C++ 6.0" Круглински, Уингоу и Шеферд - и все старые вопросы отпадут. Но появятся новые ;) !
 
B

bel_nikita

A.D.I.D.A.S
Попробовал убрать код из функций обработки этих кнопок, а затем и удалить эти кнопки. Теперь при нажатии на Enter и ESC ничего не происходит, но беда в том, что она перестала реагировать на ALT+F4 и вообще как-либо закрываться(кроме CTRL+ALT+DELETE конечно ) Заглушка дает тот же эффект...
Греби в сторону WM_KEYDOWN. Создай событие и вылавливай какие-хочешь клавиши
 
I

iktomy

Греби в сторону WM_KEYDOWN. Создай событие и вылавливай какие-хочешь клавиши
Уж слишко м ты глубоко копать предлагаешь. Лучше, ІМХО конечно, WM_CLOSE обработать, а в функцию обработчика добавить
Код:
CDialog::EndDialog(0);
CDialog::OnClose();
У меня так работает и ноу проблемс! ;)
 
B

bel_nikita

iktomy
А WM_CLOSE как генерить? Точнее, кто генерить будет? Вы это читали:
Попробовал убрать код из функций обработки этих кнопок, а затем и удалить эти кнопки. Теперь при нажатии на Enter и ESC ничего не происходит, но беда в том, что она перестала реагировать на ALT+F4 и вообще как-либо закрываться(кроме CTRL+ALT+DELETE конечно ) Заглушка дает тот же эффект...
iktomy
Интересно и как вы ESC отрабатываете?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!