• MFC用户自定义消息


        之前做过佳能相机和位移平台的额二次开发,当时遇到一个棘手的问题,就是位移平台如何知道相机已经拍完照了,或者相机如何知道位移平台已经运行到指定位置,当时为了方便采用了定时器来定时检测位移平台的位置,结果在后续的工作中引起了各种意想不到的错误。其实用户自定义消息之前了解过,由于之前编程一直没用到过,所以没去深入研究,主要也是自己偷懒怕麻烦。偷懒这个坏习惯必须要改,就像这次的相机开发一样,遇到问题没有去解决而采取回避方式,最终给自己带来了更大的麻烦。其实用户自定义消息并不是一件特别麻烦的事情。

          在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。  

    (1)窗口消息:WM_XXX

          窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。  

    (2)命令消息:WM_COMMAND

          命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如:装载文件、编辑文本和保存选项等)。  

    (3)控件通知:有多种格式       通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。  

          BN_XXXX是CButton产生的消息,EN_XXXX是CEdit产生的消息,等等。

    消息映射、循环机制作为Windows程序运行的基本方式。MFC中我们必须手动在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。

    自定义消息步骤:

    首先在源文件中定义一个消息的ID

    #define WM_USERMESSAGE WM_USER+100
    

    其次就是定义接收消息的函数

             先在头文件中加上自定义消息的处理函数原型

                  在DECLARE_MESSAGE_MAP()语句之前,一对AFX_MSG之间加上如下形式的函数原型:

                  afx_msg LRESULT OnProcName( WPARAM wParam, LPARAM lParam);

             

             然后在实现文件中加上接受消息映射的宏

                     在cpp文件里,BEGIN_MESSAGE_MAP语句之后,在一对BEGIN_MESSAGE_MAP(ThisClass, BaseClass)与END_MESSAGE_MAP()之间,增加 如下形式的代码:

              ON_MESSAGE(WM_USERMESSAGE, OnProcName)
    

    最后就是用户发送消息了

    这里有两种方式PostMessage();SendMessage();两种方式略有区别。

  • 相关阅读:
    报错信息
    交通
    安装Charles代理
    安装Phabricator
    缓存更新问题
    最好的学习资料在官网
    mysql安装
    git使用
    vbox的centos系统挂载win共享目录做web目录www用户权限问题
    一句话解决windows下quick-cocos2d-x中player3打开黑屏问题
  • 原文地址:https://www.cnblogs.com/meadow-glog/p/4542747.html
Copyright © 2020-2023  润新知