• MFC中SendMessage和PostMessage两种发送消息用法


    前一段时间做项目,用到消息响应机制,为了记忆,特发与此!待事件充裕之时再进行整理。

    1.可通过SendMessage或PostMessage发送消息;

    SendMessage是发送消息之后待消息响应执行完才返回;而PostMessage将消息发送出去之后就立刻返回。



    2.两种消息的原型:

    LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)

    各参数含义:

    hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
    Msg:指定被发送的消息。
    wParam:指定附加的消息特定信息。
    IParam:指定附加的消息特定信息。
    返回值:返回值指定消息处理的结果,依赖于所发送的消息。

    B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
    各参数含义:
    hWnd:其窗口程序接收消息的窗口的句柄。
    可取有特定含义的两个值:
    (1)HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、  被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口
     (2)NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样
    Msg:指定被寄送的消息。
    wParam:指定附加的消息特定的信息。
    IParam:指定附加的消息特定的信息。
    返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。

    例如:(发送消息)
     #define WM_TESTSENDMSG WM_USER+200//给消息一个ID
    	CString str="TEST";
    	CWnd *pWnd=CWnd::FindWindow(NULL,str);//得到窗口句柄
    	 	
    	if(pWnd)
    	{
    		pWnd->SendMessage(WM_TESTSENDMSG,1,0);//向窗口发送消息或者pWnd->PostMessage(WM_TESTSENDMSG,1,0)
    	}

    3.消息响应
    void Cxxxxx::OnReciveMessage(WPARAM wParam,LPARAM lParam)
    {
    //功能代码
    }

    //*.h文件声明
    afx_msg void OnReciveMessage(WPARAM wParam,LPARAM lParam);

    4.在消息接收端将消息ID和消息响应联系起来
    BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
    	//{{AFX_MSG_MAP(CXXXDlg)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    
    	//}}AFX_MSG_MAP
    
    
    	ON_MESSAGE(WM_TESTSENDMSG,OnReciveMessage)//将消息ID和响应联系
    END_MESSAGE_MAP()



    
    
    
    
    
    
    
    
    
    
    
        
            

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    spring-base.xml
    计算和证明施密特正交,写的很清楚
    推理
    存在某种关系时,推理存在新关系
    PyCharm 技巧
    3#记录
    2#记录
    一文揭秘!自底向上构建知识图谱全过程
    1#记录
    本体建模小结
  • 原文地址:https://www.cnblogs.com/will1990/p/4951538.html
Copyright © 2020-2023  润新知