MFC消息发送:

static HANDLE hWnd =FindWindow(NULL,_T("Client"));     //找到窗口

if(hWnd == INVALID_HANDLE_VALUE || hWnd == NULL)
    hWnd = NULL;
else
    SendMessage(hWnd, WM_USER+, , );             //对窗口发送息定义消息

MFC消息接收:

//重载消息处理函数
protected:
    virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);

//获取消息并处理
LRESULT CClientDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    :
        Display_C();
        break;
    }
    return CDialog::WindowProc(message, wParam, lParam);
}

另外一个更底层的消息处理函数

protected:
    BOOL  PreTranslateMessage(MSG* pMsg);        //在MFC之前处理消息,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息,PreTranslateMessage()不会接收到。

//TODO:拦截窗口回车键消息转为发送Tab消息,keybd_event函数是比较底层的键盘消息
BOOL CClientDlg::PreTranslateMessage(MSG*   pMsg)
{
    if(pMsg->message == WM_KEYDOWN )
    {
        if(pMsg->hwnd == GetDlgItem(IDC_EDIT_ProID)->m_hWnd)
        {
            switch(   pMsg->wParam   )
            {
                case   VK_RETURN:
                    keybd_event(, , );                    //Tab
                    keybd_event(, KEYEVENTF_KEYUP, );
                    return TRUE;                      //返回TRUE,则不会把该消息分发给窗口函数处理。
            }
        }
    }
    return   CDialog::PreTranslateMessage(pMsg);
}
在MFC框架下GetMessage(...)从消息队列中获取消息后交由PreTranslateMessage()处理,若其返回FALSE则再交给TranslateMessage和 DispatchMessage处理(进入WindowProc);如果用SendMessage, 则消息直接交到WindowProc处理,GetMessage不会取得SendMessage的消息,当然PreTranslateMessage也就不会被调用。 如果用PostMessage,则消息进入消息队列由GetMessage取得,PreTranslateMessage就有机会进行处理。当然PreTranslateMessage并不是万能的,它并不能过滤所有的消息,有些消息它处理不了,比如WM_NCPAINT消息。

一个线程只有一个消息队列, 一般只有一个TranslateMessage()和Dispatch,但却有很多个WindowProc, 一个窗口对应一个windowProc。也不是所有的消息都会经过 WindowProc()比如, 如果窗口中含有子窗口, 那么如果鼠标滑过子窗口, 鼠标移动消息直接在PreTranslateMessage()里面派发给了子窗口的WindowProc()

CE 消息处理的更多相关文章

  1. (转) Windows Mobile和Windows CE的区别

    转发自 http://blog.sina.com.cn/s/blog_6250bbe60100tsf3.html WinCE Windows CE 是一个可定制的操作系统: Windows Mobil ...

  2. Storm如何保证可靠的消息处理

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文主要翻译自Storm官方文档Guaranteeing messag ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理

    系列目录 前言 Senparc.Weixin.MP SDK提供了MessageHandler消息处理类 在作者的Wiki中也详细说明了如何定义这个类,下面我们来演示,消息的回复,及效果 了解Messa ...

  4. Android消息处理机制(Handler、Looper、MessageQueue与Message)

    Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取 ...

  5. CE修改器修改DNF 测试视频 阿修罗提升智力增加攻击力

    使用CE修改器来修改网络游戏,如DNF 测试视频: CE修改器:指的是Cheat Engine,字面上的意思指的是作弊引擎的意思,是一款内存修改编辑工具.通过修改游戏的内存数据来得到一些原本无法实现的 ...

  6. PreEmptive Dotfuscator and Analytics CE

    PreEmptive Dotfuscator and Analytics CE Dotfuscator 是领先的 .NET 模糊处理程序和压缩程序,有助于防止程序遭到反向工程,同时使程序更小更高效.D ...

  7. Android源码——应用程序的消息处理机制

    Android应用程序在启动每个线程时,都会创建一个消息队列.线程的生命周期分为创建消息队列和进入消息循环两个阶段. 消息循环分为:发送消息和处理消息. Android系统主要通过MessageQue ...

  8. Android消息处理

    基本概念: Message:消息,其中包含了消息ID.what,消息处理对象.obj以及处理的数据.arg1.arg2等,由MessageQueue统一列队,终由Handler处理. Handler: ...

  9. android的消息处理机制——Looper,Handler,Message

    在开始讨论android的消息处理机制前,先来谈谈一些基本相关的术语. 通信的同步(Synchronous):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将 ...

随机推荐

  1. c调用python

    #include <Python.h>//python33(python2.x有几个函数不对应) /* PyImport_ImportModule 导入一个Python模块并返回它的指针 ...

  2. Python异常总结(出处: 鱼C论坛)

    Python 标准异常总结http://bbs.fishc.com/thread-45814-1-1.html(出处: 鱼C论坛) Python标准异常总结AssertionError    断言语句 ...

  3. 7月10日——[HouseStark] 扬帆起航--第一次会议

    本次会议为小组成员第一次会议 内容:每个成员提出一个及以上的项目及内容,成员内部商议并投票决定要做的项目 会议时长:90分钟 地点:电三楼8楼816室 成员 项目 讨论结果 崔文祥 高校就业信息汇总网 ...

  4. Python/dotNET Redis服务连接客户端调用SET方法的同时获取Redis服务器返回的内容

    在用Python或dotNET redis客户端连接redis服务器的时候,当你调用客户端的SET方法后同时还想得到其返回的字符串,那么需要处理一下. 1. Redis Python redis客户端 ...

  5. EL和JSTL专题

    EL简介 EL全名为Expression Language,它原本是JSTL 1.0为方便存取数据所自定义的语言.当时只能在JSTL标签中使用,如下: <c:out value="${ ...

  6. web浏览器兼容简要整理

    ajax的创建 if (window.XMLHttpRequest) { var xhr = new XMLHttpRequest(); } else { //IE6及其以下版本浏览器 var xhr ...

  7. MySQL数据库7 - 汇总和分组数据

    一 汇总和分组数据 查询语句 ---> 结果集(多条数据) ---> 聚合函数  ----> 单行记录 1.常用的聚合函数: sum()         数字             ...

  8. MFC 屏幕截图方法

    //获取当前屏幕的并且保存图片 LRESULT CFeetScanView::SaveViewBMP(WPARAM wParam, LPARAM lParam) { CRect rect; this- ...

  9. OpenSuse Caffe CNN库 配置

    参考官方文档:http://caffe.berkeleyvision.org/installation.html 1. 安装CUDA 参考 http://www.cnblogs.com/sunshy/ ...

  10. dsaf

    fdsafds fdsa fds f dsa