Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
verter
Сообщений: n/a
#1

Как отловить событие перехода с контрола на контрол в диалоге? - C++

28.12.2009, 12:13. Просмотров 880. Ответов 3
Метки нет (Все метки)

Есть диалог. На нём лежит несколько контролов(нестандартных).Как средствами самого диалога отловить событие перехода с контрола на контрол?Т.е., например, нельзя использовать сообщение EN_KILLFOCUS,потому что в моём случае такие контролы, которые ничего подобного не посылают.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2009, 12:13     Как отловить событие перехода с контрола на контрол в диалоге?
Посмотрите здесь:

Как в диалоге отловить событие помещения фокуса на какой-нибудь контрол? - C++
Привет всем! А как, собственно говоря, в диалоге отловить событие помещения фокуса на какой-нибудь контрол? Ну т.е. нажали на...

В диалоге лист-контрол, как в InitDialog добавить туда столбец? - C++
Сабж. Нарисовал диалог, в нем лист-контрол. Как туда добавить столбец? Понятно что с помощью InsertColumn, а как её заюзать что-то не...

Как отловить событие модема "линия занята"? - C++
Событие CONNECT отловить легко через функцию WaitCommEvent(). А как отловить событие BUSY? конечно можно читать и парсировать сообщения...

Как из CStatic сделать контрол? - C++
Как из CStatic сделать контрол, который бы реагировал на нажатия мышки MUp,MDown,Click. Помогите чайнику.

Как отловить переполнения? - C++
Есть проект dll, в в нём экспортируемая функция, возвращающая BOOL, требуется при переполнении любой вещественной операции в теле этой...

Как отловить закрытие программы? - C++
Не знаю как описать проблему, поэтому просто опишу, своими словами. На форме в TMainMenu и в TTrayIcon есть кнопки "закрыть". В них...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
29.12.2009, 20:45     Как отловить событие перехода с контрола на контрол в диалоге? #2
Достаточно тривиальная задача, решаемая в рамках MFC путем переопределения ф-ции PreTranslateMessage, например:

Код
BOOL CMySweetyDlg::PreTranslateMessage(MSG* pMsg)
{
    if ((pMsg->message == WM_KEYDOWN) || (pMsg->message == WM_KEYUP))
    {
        // Catch if Tab key was pressed
        if (pMsg->wParam != VK_TAB)
        {
            // Do what ever we supposed to
            // ...
        }
    }

    return CDialog::PreTranslateMessage(pMsg);
}
Удачи, Владимир
verter
Сообщений: n/a
30.12.2009, 10:52     Как отловить событие перехода с контрола на контрол в диалоге? #3
Во-первых, большое спасибо за отклик. А во-вторых, задача на самом деле не такая уж и сложная, но и не тривиальная. Ptretranslate'ом можно отловить нажатие на табуляцию и с помощью вызова GetFocus() получить контрол С КОТОРОГО переходим на следующий по списку табуляции, т.е. фокус принимает СЛЕДУЮЩИЙ контрол. Мне нужно идентифицировать как раз СЛЕДУЮЩИЙ контрол, а не С КОТОРОГО. К тому же с табуляцией я смогу разобраться только клавиатурой. А если контрол выбирают мышкой? Тогда в этом же Pretranslate'е нужно отловить LBUTTUNDOWN и RBUTTONDOWN, но там я смогу опять же определить контрол С КОТОРОГО, а мне нужен СЛЕДУЮЩИЙ. Понимаешь?
Я решил уже эту задачу поставив таймер(WM_TIMER), в обработчике которого каждые 500 мс вызываю GetFocus() и запоминаю в переменной класса диалога указатель на контрол который в данный момент в фокусе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2009, 23:56     Как отловить событие перехода с контрола на контрол в диалоге?
Еще ссылки по теме:

Как отловить буфер обмена!? - C++
Как мне сделать так чтобы программа, если она запущена, каждую секудну смотрела есть ли в буфере текст, желательно не просто текст, а...

Как отловить +/-INF и NAN? - C++
Здравствуйте. Проблема в возникновении в ходе вычислений указанных в заголовке значений. Причем трагизм ситуации в том, что после начала...

Файлы. Как отловить конец строки. - C++
Доброй ночи всем. Столкнулся с небольшой проблемой : надо прочесть из файла большое количество информации. Решил все хранить в векторе...

Как отловить место критической ошибки? - C++
Добрый день. Пишу проект. Для работы использую OpenCV. Время от времени возникает критическая ошибка, как можно отловить место...

Как из дочерних форм добраться до методов и свойств контрола? - C++
не знаю как сформулировать вопрос для поисковика, поэнтому спрашиваю:) на диалоговой форме (усл. главная) расположен табктрл, переберая...

Как сделать проверку перехода на новую строку? - C++
Пусть задан istream in; Хочу проверить осуществляется ли переход на новую строку, то есть: 1) KEYWORD NEW 2) KEYWORD OLD


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
30.12.2009, 23:56     Как отловить событие перехода с контрола на контрол в диалоге? #4
Чтобы не мудрить особо, позволю просто с Вами не согласиться по поводу нетривиальности проблемы и преведу пример, который немногим сложнее предыдущего, но в отличие от оного позволяет определить текст, содержащийся в эелементе получившем фокус:

Код
BOOL CTabTestDlg::PreTranslateMessage(MSG* pMsg)
{
    char str[200];

    // Tabulation
    if (pMsg->wParam == VK_TAB)
    {
        if (pMsg->message == WM_KEYDOWN)
        {
            // Will give us a pointer to the control that is losing focus

            //::GetWindowText(pMsg->hwnd, (char*)&str, 200);
            //AfxMessageBox((char*)&str);
        } else if (pMsg->message == WM_KEYUP)
        {
            // Will return a pointer to the control that has received focus

            ::GetWindowText(pMsg->hwnd, (char*)&str, 200);
            AfxMessageBox((char*)&str);
        }
    }

    // Mouse click
    if (pMsg->message == WM_LBUTTONUP)
    {
        // Exclude the click over the form
        if (pMsg->hwnd != m_hWnd)
        {
            ::GetWindowText(pMsg->hwnd, (char*)&str, 200);
            AfxMessageBox((char*)&str);
        }
    }

    return CDialog::PreTranslateMessage(pMsg);
}
Удачи, Владимир
Yandex
Объявления
30.12.2009, 23:56     Как отловить событие перехода с контрола на контрол в диалоге?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru