Как обрабатывать уведомления в дочерних и родительских классах? - PullRequest
1 голос
/ 09 марта 2009

У меня есть пользовательский 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, но он все еще не отправляет сообщение родителю. Кроме того, я заметил, что когда я отправляю сообщение родителю, я оказываюсь в почти бесконечном цикле (по какой-то причине оно прерывается после нескольких итераций).

1 Ответ

2 голосов
/ 10 марта 2009

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

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

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

...