精华内容
下载资源
问答
  • 如题,MFC中自定义消息响应函数和重写OnWndMsg函数处理自定义消息有什么区别,求大佬指教
  • 主要介绍了VC自定义消息响应函数postmessage用法示例,并对比说明了postmessage与sendmessage的用法区别,需要的朋友可以参考下
  • 自定义消息响应函数

    千次阅读 2014-05-09 15:05:21
    手动添加消息和消息处理函数 1、由于是用户自己定义的消息,所以首先要定义一个消息宏如下: #define WM_MYMESSAGE (WM_...2、定义一个消息响应宏,即将此宏映射的函数,如下: ON_MESSAGE(WM_MYMESSAGE,OnMyMssage
    手动添加消息和消息处理函数
    1、由于是用户自己定义的消息,所以首先要定义一个消息宏如下:
    #define WM_MYMESSAGE (WM_USER+1)       //在*.h文件里添加
    注意:为防止用户定义的宏和系统定义宏冲突,所以系统提供了一个WM_USER,只要是大于WM_USER可供用户使用
    2、定义一个消息响应宏,即将此宏映射的函数,如下:
    ON_MESSAGE(WM_MYMESSAGE,OnMyMssage)         //在*.cpp文件里添加
    WM_MYMESSAGE为自定义的宏,OnMyMssage为消息处理函数名
    3、在头文件中声明自己的消息处理函数,如下:
    afx_msg LRESULT OnMyMssage(WPARAM w,LPARAM l);      // 这个要添加在类的public函数中
    4、定义消息处理函数,如下:
    LRESULT CPostMessageDlg::OnMyMssage(WPARAM wParam, LPARAM lParam)
    {
         MessageBox("SADFA");
         return 1;
    }
    5、通过PostMessage函数将OnMyMssage添加到消息队列中,如下:
    void CPostMessageDlg::OnButton1() //按钮响应事件
    {
         PostMessage(WM_MYMESSAGE,IDC_BUTTON1);//发送之后立即返回
         //SendMessage(WM_MYMESSAGE);//发送之后等待返回

    }


    从以上的例子可看出,要在*.h文件里,自定义一个消息~~同时,在类的public里定义(准确的说是”声明“)消息的响应函数,

    并且结构是固定的afx_msg LRESULT OnMyMssage(WPARAM w,LPARAM l);   

    在*.cpp文件中,我们要在消息映射宏里添加ON_MESSAGE(WM_MYMESSAGE,OnMyMssage)   ,

    这个相当于把消息和消息响应函数关联起来,

    接下来就是要实现OnMyMssage这个消息响应函数了,

    最后就是要在合适的地方(比如说点击一个按钮),用PostMessage把消息发送出去,

    (触发消息的方法有很多,比如,点击某个按钮,点击一个菜单栏,在某个函数中添加一个发送语句等)

    展开全文
  • VC中自定义消息响应函数 这是从新对windows的自定义消息响应函数进行整理。因为我发现自定义消息响应函数还是非常有用的,尤其是在windows多编程中,用的类越多,有时候就比较有用。 Windows消息用"WM_"这...

    VC中自定义消息响应函数

    这是从新对windows的自定义消息响应函数进行整理。因为我发现自定义消息响应函数还是非常有用的,尤其是在windows多编程中,用的类越多,有时候就比较有用。

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

    //

    1.建立响应函数的原型:
    在VS2005中,对于响应函数有了个比较严格的规定,导致以前VC6里面有很多不能直接使用,原型如下:

    Cpp代码 
    1. afx_msg LRESULT (CWnd::)MyFnx(WPARAM wParam,LPARAM lParam)  

     

    对于返回类型与参数都不能少。将响应函数添加在头文件当中:

    Cpp代码 
    1. ......     
    2. // 生成的消息映射函数     
    3. protected:     
    4. ......     
    5. afx_msg LRESULT MyFnx(WPARAM wParam, LPARAM lParam);     
    6. ......     
    7. DECLARE_MESSAGE_MAP()     
    8. ......    

     

    2.定义消息:
    在类的头文件中添加一个自定义的消息:

    Cpp代码 
    1. #define UM_MYMSG WM_USER+1  

     

    这样UM_MYMSG就是对应的消息。
    3.将消息映射到响应函数:
    在类的源文件中添加映射关系:

    Cpp代码 
    1. .......     
    2. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)     
    3. ......     
    4. ON_MESSAGE(UM_MYMSG,MyFnx)     
    5. ......     
    6. END_MESSAGE_MAP()     
    7. ......   

     

    4.响应函数的具体实现:
    在源文件中添加上成员函数MyFnx的具体实现:

    Cpp代码 
    1. LRESULT CWnd::MyFnx(WPARAM wParam, LPARAM lParam)     
    2. {     
    3. ......     
    4. }   

     

    5.在需要使用到该函数的地方发出消息

    Cpp代码
    1. PostMessage(MY_MSG,wParam,lParam);     
    2. //将消息加入等待队列,不会马上执行     
    3. //SendMessage(MY_MSG,wParam,lParam)则不同,会马上执行 

    下面我们举一个实际的例子来说明该段过程.例如在对话框中设置一个按钮,每隔3秒钟会自动的弹出Message对话框:

    (1)首先在头文件或CPP文件中定义一个消息

    ?
    #define CLICK_MESSAGE_BOX  WM_USER+100

     (2)然后在消息映射宏里面添加函数声明:

     

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //{{AFX_MSG(CMy41Dlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnButton1();
    afx_msg void OnTimer(UINT nIDEvent);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    afx_msg void OnResponse(int num);

     我们一般将自定义的消息卸载AFX_MSG的外面

    (3)在CPP文件里面将消息和消息响应函数链接:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BEGIN_MESSAGE_MAP(CMy41Dlg, CDialog)
        //{{AFX_MSG_MAP(CMy41Dlg)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
        ON_WM_TIMER()
        ON_MESSAGE (CLICK_MESSAGE_BOX,OnResponse)//
        //}}AFX_MSG_MAP
     
         
    END_MESSAGE_MAP()

     (4)定义响应函数

    ?
    void CMy41Dlg::OnResponse(int num)
    {
        CString str;
        str.Format("%d",num);
        MessageBox(str+"自定义的消息响应函数");
    }

     (5)发送消息:

    ?
    PostMessage(CLICK_MESSAGE_BOX,1);

     需要注意的是,PostMessage函数后面带有参数,可以向响应函数里面传参,例如上面的例子中,我们在(5)的消息函数中有一个int num,其实就是postMessage函数传过来的参数1。 

    展开全文
  • MFC中添加自定义消息响应函数

    千次阅读 2011-07-18 16:09:21
    在MFC应用程序中添加自定义消息响应函数,大致分为三步 1,定义自定义消息值 #define MSG_MESSAGE_ID WM_USER + 12545 2, 在头文件中定义消息响应函数,在cpp文件中实现该函数afx_msg LRESULT

         在MFC应用程序中添加自定义消息响应函数,大致分为三步

         1,定义自定义消息值          

    #define MSG_MESSAGE_ID WM_USER + 12545

         2, 在头文件中定义消息响应函数,在cpp文件中实现该函数

    afx_msg LRESULT MessageFunc( WPARAM wParam, LPARAM lParam );

         3,在cpp文件中添加消息映射

    BEGIN_MESSAGE_MAP(CdemoDlg, CDialog)
        ON_MESSAGE( MSG_CALL_STATUS, &CdemoDlg::MessageFunc) 
    END_MESSAGE_MAP()


    注意,如果想要使用唯一的消息值,可使用如下代码实现:

    static UINT MSG_MESSAGE_ID=RegisterWindowMessage(L"MSG_MESSAGE_ID");


    则第3步需要修改为:

    BEGIN_MESSAGE_MAP(CdemoDlg, CDialog)
        ON_REGISTERED_MESSAGE( MSG_CALL_STATUS, &CdemoDlg::MessageFunc) 
    END_MESSAGE_MAP()



    展开全文
  • 手动添加消息消息处理函数 1、由于是用户自己定义的消息,所以首先要定义一个消息宏如下: #define WM_MYMESSAGE (WM_USER+1) //在*.h文件里添加 注意:为防止用户定义的宏和系统定义宏冲突,所以系统提供了...

    该文章时转载自:http://blog.csdn.net/foreverhuylee/article/details/25394401

     

    手动添加消息和消息处理函数

     

    1、由于是用户自己定义的消息,所以首先要定义一个消息宏如下:
    #define WM_MYMESSAGE (WM_USER+1)       //在*.h文件里添加
    注意:为防止用户定义的宏和系统定义宏冲突,所以系统提供了一个WM_USER,只要是大于WM_USER可供用户使用
    2、定义一个消息响应宏,即将此宏映射的函数,如下:
    ON_MESSAGE(WM_MYMESSAGE,OnMyMssage)         //在*.cpp文件里添加
    WM_MYMESSAGE为自定义的宏,OnMyMssage为消息处理函数名
    3、在头文件中声明自己的消息处理函数,如下:
    afx_msg LRESULT OnMyMssage(WPARAM w,LPARAM l);      // 这个要添加在类的public函数中
    4、定义消息处理函数,如下:
    LRESULT CPostMessageDlg::OnMyMssage(WPARAM wParam, LPARAM lParam)
    {
         MessageBox("SADFA");
         return 1;
    }
    5、通过PostMessage函数将OnMyMssage添加到消息队列中,如下:
    void CPostMessageDlg::OnButton1() //按钮响应事件
    {
         PostMessage(WM_MYMESSAGE,IDC_BUTTON1);//发送之后立即返回
         //SendMessage(WM_MYMESSAGE);//发送之后等待返回

     

    }

     

    从以上的例子可看出,要在*.h文件里,自定义一个消息~~同时,在类的public里定义(准确的说是”声明“)消息的响应函数,

    并且结构是固定的afx_msg LRESULT OnMyMssage(WPARAM w,LPARAM l);   

    在*.cpp文件中,我们要在消息映射宏里添加ON_MESSAGE(WM_MYMESSAGE,OnMyMssage)   ,

    这个相当于把消息和消息响应函数关联起来,

    接下来就是要实现OnMyMssage这个消息响应函数了,

    最后就是要在合适的地方(比如说点击一个按钮),用PostMessage把消息发送出去,

    (触发消息的方法有很多,比如,点击某个按钮,点击一个菜单栏,在某个函数中添加一个发送语句等)

     

     

    展开全文
  • 这段时间看vc++深入详解.看到添加自定义消息那一节,按照书上的方法就是编译不通过.vc6.0和vs2008中添加消息的方法不同....2.类头文件中声明消息响应函数(OnProgress) vc6.0声明如下 afx_msg voi
  • 1.自定义消息ID。 MyMessageDlg.h中 #define WM_MY_MESSAGE (WM_USER + 100) WM_USER为windows系统为非系统消息保留的ID,这里至少要用100,因为其它控件的消息会占用一部分。 2. 定义消息处理函数。 消息处理...
  • 后来听技术大牛点拨,主对话框中PostMessage的参数和子对话框自定义消息响应函数绑定,然后PostMessage把消息抛出,当执行到主对话框的PostMessage时,就会触发子对话框的消息响应函数。废话少说,开始讲代码:以下...
  • QT 自定义消息响应

    千次阅读 2013-06-19 11:20:06
    1、QT自定义消息响应函数 消息响应函数声明: 注:slots public slots: void testMessage(); 消息响应函数实现: 注:#include #include void MyClass::testMessage() { QMessageBox::information(this, tr...
  • 刚开始用MFC一般都是由class wizard自动生成消息、消息映射以及消息响应函数原型,后来写代码的时候用到自定义消息,这时就要写自己的消息映射和消息响应函数,这个时候才发现对于不同消息的关联宏对于响应函数的...
  • (1)在.h或.cpp文件定义一个消息 #define CLICK_MESSAGE_BOX WM_USER+1001... //自定义消息  #define WM_PENSIGNMSG WM_USER+1001 (2)在.h中类定义里添加消息映射DECLARE_MESSAGE_MAP() //类的定义  clas...
  • 1、检查消息定义、响应函数定义、映射定义完备; 2、将映射定义放到映射表的第一行,发现可以驱动响应函数了;...3、检查程序中所有自定义消息,果然发现有一个消息的定义值与这个消息定义值相同;
  • 本文介绍 两种方法 添加用户自定义消息消息响应函数。 第一种,用户手动添加两个文件((.h)和 (.cpp))的内容。 第二种,利用 MFC 的集成功能,自动添加。(推荐) 二.讲解 1.方法一:用户手动添加。 步骤...
  • 1.在对应类的头文件中自定义消息 如:#define WM_RESULT WM_USER+1 ...2.在头文件中定义消息响应函数,注意:这个函数的返回值必须是LRESULT 参数必须是 WPARAM 和LPARAM类型。 这是因为afx_msg void OnMyMessage
  • 如果用户自定义的类要求响应普通的Windows消息(也就是以WM_开头,除了WM_COMMAND以外的消息,这类消息在WM_USER以下的是系统消息,WM_USER以上的可以由用户自己定义),那就要求自定义的类必须从CWnd中派生。...
  • 一、添加消息响应函数 二、在源文本中添加反消息映射宏代码 三、实现消息处理函数 OK了! 转载于:https://my.oschina.net/sindsun/blog/1...
  • 自定义消息函数响应

    千次阅读 2012-11-06 10:46:53
    症状: 自定义消息函数 不响应消息 #define WM_DISCONNECT WM_USER+101 ON_MESSAGE(WM_DISCONNECT,OnDisConnect) afx_msg LRESULT OnDisConnect(WPARAM wParam, LPARAM lParam); LRESULT CMainFrame::...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 737
精华内容 294
关键字:

自定义消息响应函数