zoukankan      html  css  js  c++  java
  • MFC PostMessage SendMessage

    在MFC项目中,需要用到自定义消息来传递数据,故对PostMessage,SendMessage的用法进行整理。

    • 函数定义
    LRESULT SendMessage(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM IParam);
    
    LRESULT PostMessage(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM IParam);
    
    //hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
    
    //wMsg:用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量.
    
    //wParam:通常是一个与消息有关的常量值,也可能是窗口或控件的句柄
    
    //lParam:通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer都是32位的,因此,它们之间可以相互转换
    
    //返回值指定消息处理的结果,依赖于所发送的消息。
    • 如何使用

    1. 自定义消息ID

    #define WM_MY_MESSAGE (WM_USER+100)        // WM_USER为windows系统为非系统消息保留的ID,这里至少要用100,因为其它控件的消息会占用一部分。

    2. 定义消息处理函数

    消息处理函数为消息目标类的成员函数。首先应该在.h 文件中声明。这里以主窗口类为例,主窗口类名 CMainDialog,则首先在CMainDialog.h声明消息处理函数。

    protected: 
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);  //注意要有返回值,如LRESULT,其他类型也可以

    3.在CMainDialog.cpp中实现消息处理函数

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

    4.在CMainDialog.cpp中映射消息ID和消息处理函数

    BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) 
    ON_WM_CREATE() 
    ON_WM_TIMER() 
    ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) 
    //}}AFX_MSG_MAP 
    END_MESSAGE_MAP()

    5.使用PostMessage/SendMessage函数

    在需要发送的数据地方,使用这两个函数传递消息就可以。下面是简单写法:(SendMessage 用法一样)

    ::PostMessage(GetSafeHwnd(), WM_USER_THREADEND, 0, 0); //GetSafeHwnd()表示得到当前窗口句柄,所以这条语句是发送给当前窗口
    GetParent()->PostMessage(WM_USER_THREADEND, 0, 0);//发送给父窗口 
    this->PostMessage(WM_USER_THREADEND, 0, 0);//发送给当前窗口
    HWND h= ::FindWindow(NULL, _T("窗口名字"));
    ::PostMessage(h, WM_PARASET, 0, 0);//发送给任意窗口
    •  PostMessage/SendMessage区别

    SendMessage:将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口过程,直到窗口过程处理完消息后才返回,阻塞式。其发送的消息为不进度消息。

    PostMessage:将消息放入与创建窗口的线程相关联的消息队列里,并立即返回,执行后面的代码,非阻塞式。

  • 相关阅读:
    深度学习模型调参
    人脸神经网络及算法整理
    【转】python pip install指定国内源
    人脸识别数据集整理
    卷积神经网络整理+ResNet50
    【转载】人脸检测通用评价标准
    【转载】InsightFace算法学习
    Linux手动识别4G模块
    openwrt监控程序(守护进程)
    测试流程详解
  • 原文地址:https://www.cnblogs.com/ycbeginner/p/9374796.html
Copyright © 2011-2022 走看看