OnOK() и OnCancel() в VC++

Тема в разделе "MS Visual C++", создана пользователем A.D.I.D.A.S, 29 окт 2004.

  1. A.D.I.D.A.S

    A.D.I.D.A.S Гость

    Подскажите пожалуйсто такую вещь:
    При создании приложения типа Dialog Based на диалоге сразу есть 2 кнопки - Ok и Cancel. Их конечно можно убрать, но при нажатии на Enter и ESC все равно срабатывают методы OnOK() и OnCancel()... Как от этого избавится(т.е. чтобы при нажатии этих кнопок ничего не происходило)?
     
  2. iktomy

    iktomy Гость

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

    A.D.I.D.A.S Гость

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

    A.D.I.D.A.S Гость

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

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

    A.D.I.D.A.S Гость

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

    Guest Гость

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

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

    iktomy Гость

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

    bel_nikita Гость

    A.D.I.D.A.S
    Греби в сторону WM_KEYDOWN. Создай событие и вылавливай какие-хочешь клавиши
     
  9. iktomy

    iktomy Гость

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

    bel_nikita Гость

    iktomy
    А WM_CLOSE как генерить? Точнее, кто генерить будет? Вы это читали:
    iktomy
    Интересно и как вы ESC отрабатываете?
     

Поделиться этой страницей