• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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 отрабатываете?
 
Мы в соцсетях:

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