manikanta3 Ответов: 1

Элемент управления Edit box сопоставлен с событием EN_CHANGE. обработчик событий вызывается каждый раз при открытии приложения в vc++ 6.0 почему?


Я сопоставил один элемент управления edit box с событием EN_CHANGE.Создается функция обработчика событий.Если я открыл свое приложение Вместе с OnInitialUpdate, функция обработчика также вызывается. Но обработчик вызывается всякий раз, когда происходит соответствующее событие.

В моем коде обработчик событий вызывается каждый раз при открытии приложения.
пожалуйста, решите мою проблему.

Что я уже пробовал:

Data.cpp
OnInitialUpdate()
{
}
OnChangeEdtData()
{
}

Обе функции вызываются, когда я пытаюсь открыть приложение

Richard MacCutchan

Где находится фактическое сопоставление сообщений с этими функциями.

1 Ответов

Рейтинг:
4

Jochen Arndt

То EN_CHANGE уведомление отправляется всякий раз, когда текст изменяется путем ввода пользователем или путем установки текста с помощью SetWindowText() / WM_SETTEXT для однострочных элементов управления редактированием.

Вероятно, у вас есть одно или несколько мест, где элемент управления редактированием инициализируется при создании родительского окна (в вашем случае представления).

Возможным решением было бы добавление переменной-члена в ваш класс представления:

// Header file
class CMyView : CView
{
    // ...
    bool m_bIgnoreChgEdtData;
    // ...
};

// Source file
void CMyView::OnitialUpdate()
{
    m_bIgnoreChgEdtData = true;
    // Perform initialisation here.
    // Note that calling CView::OnitialUpdate calls OnUpdate()
    // If you have implemented CMyView::OnUpdate() use similar code
    //  there too.
    m_bIgnoreChgEdtData = false;
}

void CMyView::OnChangeEdtData()
{
    if (!m_bIgnoreChgEdtData)
    {
        // Handle change here
    }
}

Чтобы избежать выполнения операций обработчика при вызове SetWindowText() для редактирования где-то в коде, сделать это таким же образом:
void CMyView::setEdt(LPCTSTR str)
{
    m_bIgnoreChgEdtData = true;
    m_edtData.setWindowText(str);
    m_bIgnoreChgEdtData = false;
}


manikanta3

благодаря решению ur.Из oninitialupdate () я вызываю одну функцию,в которой я использую setwindowtext для m_edtData.