zoukankan      html  css  js  c++  java
  • 关于子窗口处理自身消息而不扩散给父窗口的问题

    窗口上有个Button,你点击Button后,消息响应函数竟然写在窗口类中,也就是说是窗口执行了点击事件,而不是Button本身。为什么我点击了Button,却是窗口在响应呢?

    这里面肯定是Button自身没有处理该消息的能力(没有捕获该消息并响应的函数),所以将点击事件消息传给了父窗口,父窗口才调用响应函数完成响应动作的。

    但是,当重载Button的BN_CLICKED消息后,就会在Button内部处理这个点击事件,而不再交给父窗口处理了。

    那怎么让Button不截获这个消息继续传递给父窗口呢?

    1.将重载的ButtonEx内部的消息宏由ON_CONTROL_REFLECT(CLICKED,&CButtonEx::OnBnClicked)改成ON_CONTROL_REFLECT_EX(CLICKED,&CButtonEx::OnBnClicked)

    2.将响应函数声明afx_msg void OnBuClicked();改成afx_msg BOOLOnBuClicked();

    3.将响应函数添加返回值,即:return FALSE;

    总结:

    1.MFC在设计的时候,默认情况下,子空间是不处理自身的消息的,而是扩散给父窗口处理。当我们重载子控件并处理它自己的消息后,该消息就不会再扩散了。

    如果仍然想要扩散给父窗口,那就用return FALSE表示子控件并没有处理该消息,那样该消息就会扩散出去

    2.子控件向父窗口扩散消息发送的是WM_COMMAND消息。当然也可以通过发送自定义消息达到通信的目的。

  • 相关阅读:
    Elasticsearch7.8快照备份到阿里云存储(OSS)
    office启动时不要显示首页
    Tinker Flutter热修复
    wordpress获取最新文章列表
    Nginx下完美解决WordPress的伪静态
    freenom申请域名
    新版DigitalOcean注册及使用中文教程
    CentOs安装宝塔
    利用 Github Actions 自动更新 docfx 文档
    行为型设计模式总结
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8670686.html
Copyright © 2011-2022 走看看