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消息。当然也可以通过发送自定义消息达到通信的目的。

  • 相关阅读:
    vue相关坑
    jQuery上传文件按钮美化
    大屏幕数据可视化问题
    jquery实现点击页面空白处,弹框消失
    知识点
    js数字串传参时变科学计数法
    jQuery循环遍历取值
    如何判断一个弹框是打开还是关闭状态?
    js库写法
    React版本修改内容
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8670686.html
Copyright © 2011-2022 走看看