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. Ajax 语法

    /*** * ajax语法 * * ***/ $.ajax({ async:false, //同步请求 url:"XXXXX.do",//请求后台地址 data: {"p ...

  2. Djanog结合jquery实现ajax

    最近想在使用django的基础上通过jquery实现页面局部刷新的功能,研究了两天,终于是解决了这个问题,下面把方法步骤记录下来,以备以后重用. 在项目中通过两种形式实现了ajax: 第一种方法:we ...

  3. js键盘事件

    弱鸡今天在写键盘事件,发生一个小bug,排查了1小时(">皿<)可恶的浏览器竟然还不报错!!原因是将e.ctrlKey写成了e.ctrLKey,o(゚Д゚)っ 想想都要生气< ...

  4. 在linux中查询硬件相关信息

    1.查询cpu的相关 a.查询CPU的统计信息 使用命令:lscpu 得到的结果如下: Architecture: x86_64 CPU op-mode(s): -bit, -bit Byte Ord ...

  5. lucene5学习 - 索引基本操作(创建,查询,更新,删除,分页)

    package lucene5; import java.io.IOException; import java.nio.file.Paths; import java.text.SimpleDate ...

  6. 初学Spring

    Spring是当今最流行的框架,今天开始,dayday同学要正式开始学习Spring了,加油 以下是一个简单的应用Spring框架的java程序 src\dayday\HelloSpring.java ...

  7. java EE中使用PO和VO的注意事项

    1.基本定义  PO(Persistence Object 持久化对象)是直接跟持久层数据库打交道的java Bean (model,entity,bean等叫法都是可以的),里面除了私有的成员变量之 ...

  8. 2016 - 3 - 12 SQLite的学习之SQL语言入门

    1.SQL语句的特点: 1.1 不区分大小写 1.2 每条语句以;结尾 2.SQL语句中常用关键字: select,insert,update,from,create,where,desc,order ...

  9. BackgroundWorker组件的作用

    当构建一个图形化的Windows Form桌面应用程序并且需要执行在应用程序主UI线程之外的线程中长时间的任务时,BackgroundWorker类就很有用了. 要使用BackgroundWorker ...

  10. 黄金点游戏(js+css)

    一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...