Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: VC.NET Простая трабла с диалогом  (Прочитано 16349 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« : 03-02-2004 11:21 » 

Все приложение диалоговое.
Трабла следующая - при нажатии на любом из диалогов клавиши Enter - диалог регирует как на нажатие OnOk.
IDOK вообще не зарегистрировано на данных диалогах.
Перегружать метод OnOK не хочу - так как вроде должно решаться и так.

Где я глючу не подскажите?
Записан

Сила ночи, сила дня - одинакого фигня....
Alf
Гость
« Ответ #1 : 03-02-2004 11:37 » 

ChaoticCube, а на панели диалога есть кнопка, у которой свойство Default Button установлено в True?
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #2 : 03-02-2004 13:27 » 

Нет. Нет такой кнопки.
Там такие диалоги что и не должно быть.
Записан

Сила ночи, сила дня - одинакого фигня....
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #3 : 03-02-2004 17:36 » 

Тоже есть такая беда, все время забывл спросить. Помогите, пожалуйста.
Записан
Kuzmich
Гость
« Ответ #4 : 04-02-2004 04:58 » 

решения 2 (или больше:)):
1. всетаки перегрузить OnOK, сделав в ней заглушку
Код:
void CMyDlg::OnOK()
{
}
2.
Код:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
{
    if( pMsg->message == WM_KEYDOWN )
    {
        if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE )
        {
            ::TranslateMessage(pMsg);
            ::DispatchMessage(pMsg);
            return TRUE;                    // DO NOT process further
        }
    }

return CDialog::PreTranslateMessage(pMsg);
}
« Последнее редактирование: 23-11-2007 21:26 от Алексей1153++ » Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #5 : 04-02-2004 20:06 » 

Первый плох - клавиша Enter ваще не работает тогда.

Второй метод попробую. Спасибо.
Записан

Сила ночи, сила дня - одинакого фигня....
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 05-02-2004 05:28 » 

У техтовых окон есть свойство которое управлет их рекакцией на Ентр...
ставишь его и пока фокус на окне ввода ентр отрабатывает как в ворде...
Записан

Да да нет нет все остальное от лукавого.
Kuzmich
Гость
« Ответ #7 : 05-02-2004 05:49 » 

Цитата: PSD
У техтовых окон есть свойство которое управлет их рекакцией на Ентр...
ставишь его и пока фокус на окне ввода ентр отрабатывает как в ворде...

Да действительно такое свойство есть у контрола Edit, нужно поставить галочку want return, в этой теме вроде говорят про диалоговые окна Ага
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #8 : 05-02-2004 10:52 » new

Kuzmich, второй метод грешит тем же самым для модального диалога.

На самом деле есть метод без кода делающий тоже самое - клавиша Enter не пашет на диалоге - просто добавить клавишу IDOK и сделать ее не видимой и Disabled.

Как я понял из MSDN - для диалога функции
 ::TranslateMessage(pMsg);
 ::DispatchMessage(pMsg);
 мона вызвать только если IsDialogMessage(pMsg) - возвращает FALSE, а нажатие Enter - возвращает TRUE.

Вот как сделать так что б дефаултной функции вообще не было - вопрос.
Записан

Сила ночи, сила дня - одинакого фигня....
grozny
Гость
« Ответ #9 : 05-02-2004 23:05 » 

Цитата: ChaoticCube
Kuzmich
Вот как сделать так что б дефаултной функции вообще не было - вопрос.


дык перегрузить своей ф-цией.

Ну или отрезать акселератор.
Записан
Kuzmich
Гость
« Ответ #10 : 06-02-2004 04:33 » 

ChaoticCube, я непонял, что значит "грешит тем же самым" ?
функцию я взял из рабочего проекта, у меня все работает или тебе нужно что-то особенное ? (правда у меня студия шестая)
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #11 : 06-02-2004 13:51 » 

Грешит тем же самым - клавиша Enter не пашет на других кнопках.

У мя не пашет - и эмэфся в эмэсдээн говорит - что незя мол юзать для  IsDialogMessage(pMsg)
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
Записан

Сила ночи, сила дня - одинакого фигня....
Anchorite
Гость
« Ответ #12 : 06-02-2004 20:37 » 

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
   if (pMsg->message == WM_KEYFIRST && pMsg->wParam == VK_RETURN) {
      AfxMessageBox("Enter pressed");
      return TRUE;
   }

   return CDialog::PreTranslateMessage(pMsg);
}
Записан
Achorite
Гость
« Ответ #13 : 06-02-2004 20:59 » 

Предыдущий код не корректен. Он позволяет лишь определить нажатие на клавишу  "Enter". Нижеприведенный решает изложенную ChaoticCube проблему

BOOL CDlgDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
  if (wParam == IDOK) {
    TRACE("IDOK\n");
    return TRUE;
  }

  return CDialog::OnCommand(wParam, lParam);
}
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #14 : 06-02-2004 23:26 » 

Achorite, попробовал - решение такое же.
На других клавишах Enter не работает.

Попробую еще раз изложить проблему:

есть диалог с отсутсвующими клавишами IDOK и IDCANCEL.
Но существуют другие клавиши - пусть ID_1, ID_2,ID_3 ... ID_N

Надо сделать так что бы по нажатии Escape ничего не происходило, ибо не фиг.
А по нажатии клавиши Enter - реакция была бы такая как будто Enter нажали на том элементе, где в данный момент фокус. Если фокус нигде - то никакой реакции.

Причем проблему надо решить с наименьшим возможным кол-вом кода.

Я абсолютно точно знаю, что проблема решабельна. Знаю это от того, что обладаю проектом, где реакция именно такая. Причем в этом проекте нет кода который пытался бы решить эту проблему, проблемы просто нет как будто и не было. Однако, если я выставляю в своем уже проекте даже все опции диалога, как в проекте без проблемы, трабла в моем проекте все равно есть.
Не могу найти ошибку, так как ошибка не в коде.
Записан

Сила ночи, сила дня - одинакого фигня....
Anchorite
Гость
« Ответ #15 : 07-02-2004 07:23 » 

Ты уверен, что приложение диалоговое, а не обычное, но лишь выглядещае как диалоговое?
Записан
Anchorite
Гость
« Ответ #16 : 07-02-2004 07:37 » 

И еще вопрос? Что значит "фокус нигде". В диалогах такое невозможно. Там всегда есть сфокусированный элемент.
Записан
ChaoticCube
ChaoticCube
Помогающий

ru
Offline Offline
Пол: Мужской
ChaoticCube


« Ответ #17 : 07-02-2004 21:48 » 

Anchorite,
Dialog Based  - точно.
Фокус нигде - мой глюк, извиняюсь.
Записан

Сила ночи, сила дня - одинакого фигня....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines