c++ - 如何处理子类和父类中的通知消息?

标签 c++ winapi mfc tabcontrol

我有一个自定义的 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 但它仍然没有将消息发送到父级。 此外,我注意到,当我将消息发送给父级时,我最终陷入了几乎无限循环(出于某种原因,它确实在几次迭代后爆发)。

最佳答案

我找到了答案:

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

基本上,您必须使用 ON_NOTIFY_REFLECT_EX,然后从您的函数返回 FALSE 才能触发父通知消息。

关于c++ - 如何处理子类和父类中的通知消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/627143/

相关文章:

c++ - 附加关键字语法突出显示(对于 ReSharper C++)

c++ - 如何在 C++ 程序中使用长度指示器

android - 将图像从 ios/c++ 代码传递到 JNI Android

c# - 具有管理权限的进程在用户登录时运行

c++ - 为什么 RemoveSplash 不再是 CMainFrame 的成员?

c++ - 当嵌入式 ActiveX 控件接收和失去键盘焦点时如何得到通知?

c++ - std::vector,线程安全,多线程

winapi - 如何以编程方式弹出 USB 大容量存储设备?

c++ - directx 9 网格重叠 c++

c++ 你能命名子窗口以使其句柄静态吗?