ChaoticCube
ChaoticCube
Помогающий
Offline
Пол:
ChaoticCube
|
|
« : 03-02-2004 11:21 » |
|
Все приложение диалоговое. Трабла следующая - при нажатии на любом из диалогов клавиши Enter - диалог регирует как на нажатие OnOk. IDOK вообще не зарегистрировано на данных диалогах. Перегружать метод OnOK не хочу - так как вроде должно решаться и так.
Где я глючу не подскажите?
|
|
|
Записан
|
Сила ночи, сила дня - одинакого фигня....
|
|
|
Alf
Гость
|
|
« Ответ #1 : 03-02-2004 11:37 » |
|
ChaoticCube, а на панели диалога есть кнопка, у которой свойство Default Button установлено в True?
|
|
|
Записан
|
|
|
|
ChaoticCube
ChaoticCube
Помогающий
Offline
Пол:
ChaoticCube
|
|
« Ответ #2 : 03-02-2004 13:27 » |
|
Нет. Нет такой кнопки. Там такие диалоги что и не должно быть.
|
|
|
Записан
|
Сила ночи, сила дня - одинакого фигня....
|
|
|
little
|
|
« Ответ #3 : 03-02-2004 17:36 » |
|
Тоже есть такая беда, все время забывл спросить. Помогите, пожалуйста.
|
|
|
Записан
|
|
|
|
Kuzmich
Гость
|
|
« Ответ #4 : 04-02-2004 04:58 » |
|
решения 2 (или больше:)): 1. всетаки перегрузить 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
Помогающий
Offline
Пол:
ChaoticCube
|
|
« Ответ #5 : 04-02-2004 20:06 » |
|
Первый плох - клавиша Enter ваще не работает тогда.
Второй метод попробую. Спасибо.
|
|
|
Записан
|
Сила ночи, сила дня - одинакого фигня....
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #6 : 05-02-2004 05:28 » |
|
У техтовых окон есть свойство которое управлет их рекакцией на Ентр... ставишь его и пока фокус на окне ввода ентр отрабатывает как в ворде...
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Kuzmich
Гость
|
|
« Ответ #7 : 05-02-2004 05:49 » |
|
У техтовых окон есть свойство которое управлет их рекакцией на Ентр... ставишь его и пока фокус на окне ввода ентр отрабатывает как в ворде... Да действительно такое свойство есть у контрола Edit, нужно поставить галочку want return, в этой теме вроде говорят про диалоговые окна
|
|
|
Записан
|
|
|
|
ChaoticCube
ChaoticCube
Помогающий
Offline
Пол:
ChaoticCube
|
|
« Ответ #8 : 05-02-2004 10:52 » |
|
Kuzmich, второй метод грешит тем же самым для модального диалога.
На самом деле есть метод без кода делающий тоже самое - клавиша Enter не пашет на диалоге - просто добавить клавишу IDOK и сделать ее не видимой и Disabled.
Как я понял из MSDN - для диалога функции ::TranslateMessage(pMsg); ::DispatchMessage(pMsg); мона вызвать только если IsDialogMessage(pMsg) - возвращает FALSE, а нажатие Enter - возвращает TRUE.
Вот как сделать так что б дефаултной функции вообще не было - вопрос.
|
|
|
Записан
|
Сила ночи, сила дня - одинакого фигня....
|
|
|
grozny
Гость
|
|
« Ответ #9 : 05-02-2004 23:05 » |
|
Kuzmich Вот как сделать так что б дефаултной функции вообще не было - вопрос. дык перегрузить своей ф-цией. Ну или отрезать акселератор.
|
|
|
Записан
|
|
|
|
Kuzmich
Гость
|
|
« Ответ #10 : 06-02-2004 04:33 » |
|
ChaoticCube, я непонял, что значит "грешит тем же самым" ? функцию я взял из рабочего проекта, у меня все работает или тебе нужно что-то особенное ? (правда у меня студия шестая)
|
|
|
Записан
|
|
|
|
ChaoticCube
ChaoticCube
Помогающий
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
Помогающий
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
Помогающий
Offline
Пол:
ChaoticCube
|
|
« Ответ #17 : 07-02-2004 21:48 » |
|
Anchorite, Dialog Based - точно. Фокус нигде - мой глюк, извиняюсь.
|
|
|
Записан
|
Сила ночи, сила дня - одинакого фигня....
|
|
|
|