Como lidar com mensagens de notificação em classes filhas e pais?
-
06-07-2019 - |
Pergunta
Eu tenho um CTabCtrl costume que eu estou tentando personalizar (para páginas automaticamente mudança).
Se eu lidar com ON_NOTIFY_REFLECT(TCN_SELCHANGE, ...)
no meu controle guia, ON_NOTIFY(TCN_SELCHANGE, ...)
não é recebido pela classe pai.
Como posso receber tanto mensagens de notificação nas classes pai e filho?
Atualmente estou usando uma "solução alternativa" de enviar manualmente a mensagem WM_NOTIFY para a classe pai:
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));
}
}
Editar: Eu tentei tanto * pResult = 0 e * pResult = 1, mas ele ainda não enviar a mensagem para o pai. Além disso, tenho notado que quando eu enviar a mensagem para o pai que eu acabar em um ciclo de quase infinita (por alguma razão ele não sair depois de várias iterações).
Solução
Eu encontrei a resposta:
http://msdn.microsoft.com/en-us/library /eeah46xd.aspx
Basicamente, você tem que usar ON_NOTIFY_REFLECT_EX
e depois retornar FALSE de sua função para permitir que o pai notificar mensagem a ser demitido.