zoukankan      html  css  js  c++  java
  • MFC中创建自定义消息

    消息映射循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。

      Windows消息用"WM_"这个前缀,自定义消息一般用"UM_这个前缀"

    1、首先在头文件或CPP文件中定义一个消息(推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息)

    #define WM_MY_MESSAGE (WM_USER+100) 

    2、在消息映射宏里面添加函数声明

    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 

    3、在函数实现文件(.cpp文件)中定义消息映射ON_MESSAGE,关联消息和消息响应函数

    ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

    4、实现消息处理函数,该函数使用WPRAM和LPARAM参数并返回LPESULT

    LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)  
    {  
        // TODO: 处理用户自定义消息  
        ...  
        return 0;  
    }  

    5、发送消息

    ::PostMessage(GetSafeHwnd(), WM_MY_MESSAGE, 0, 0);

      其中GetSafeHwnd()得到了一个当前窗口的句柄,此消息将发给当前窗口;如果想发送消息给其它窗口,只需改变这个句柄,前提是目的窗口也实现了此消息的处理函数。

    注:

      如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义消息:

    static UINT WM_MY_MESSAGE=RegisterWindowMessage("User"); 

    并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。

  • 相关阅读:
    BZOJ 1269 文本编辑器editor(伸展树)
    NOI 2017 整数(线段树)
    HAOI 2018 染色(容斥+NTT)
    HDU 5279 YJC plays Minecraft(NTT+分治)
    HDU 6088 Rikka with Rock-paper-scissors(NTT+欧拉函数)
    HDU 5552 Bus Routes(NTT+分治)
    HDU 4656 Evaluation(MTT)
    HDU 5829 Rikka with Subset(NTT)
    HDU 6061 RXD and functions(NTT)
    JOISC 2014 邮戳拉力赛(DP)
  • 原文地址:https://www.cnblogs.com/xingkai/p/6406726.html
Copyright © 2011-2022 走看看