Как обрабатывать сообщения уведомлений в дочерних и родительских классах?

У меня есть собственный CTabCtrl, который я пытаюсь настроить (для автоматической смены страниц).

Если я обработаю ON_NOTIFY_REFLECT(TCN_SELCHANGE, ...) в своем элементе управления вкладками, ON_NOTIFY(TCN_SELCHANGE, ...) не будет получен родительским классом.

Как я могу получать уведомления как в дочернем, так и в родительском классах?

В настоящее время я использую «обходной путь» ручной отправки сообщения WM_NOTIFY родительскому классу:

void CMyTabControl::OnSelChange(NMHDR *pHeader, LRESULT *pResult)
{
    const int index = this->GetCurSel();
    this->ShowTab(index);

    const CWnd *const pParent = this->GetParent();
    if (pParent != NULL)
    {
        *pResult = pParent->SendMessage(WM_NOTIFY, TCN_SELCHANGE, 
            reinterpret_cast<LPARAM>(pHeader));
    }
}

Редактировать: я пробовал как *pResult = 0, так и *pResult = 1, но это все еще не отправляет сообщение родителю. Кроме того, я заметил, что когда я отправляю сообщение родителю, я попадаю в почти бесконечный цикл (по какой-то причине он прерывается после нескольких итераций).


person Mark Ingram    schedule 09.03.2009    source источник


Ответы (1)


Я нашел ответ:

http://msdn.microsoft.com/en-us/library/eeah46xd.aspx

В основном вы должны использовать ON_NOTIFY_REFLECT_EX, а затем возвращать FALSE из своей функции, чтобы разрешить запуск родительского уведомления.

person Mark Ingram    schedule 10.03.2009