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. ado.net中,数据的批量处理

    //btBigImport按钮点击事件 private void btBigImport_Click(object sender, RoutedEventArgs e)        { //连接字符 ...

  2. 不使用ASP.NET中的服务器控件将如何上传文件?

    遇到文件的上传时,可能会有大部分的开发者喜欢使用服务器控件,虽然很方便,但是却不能很好的控制,不具灵活性. 现给出例子,使用html标签语言灵活的控制文件的上传. 1.html部分 <input ...

  3. C#和Java在重写上的区别

    C# class A { public string Get1() { return "A1"; } public virtual string Get2() { return & ...

  4. jsp中的正则表达式

    sp中${}----是EL表达式的常规表示方式目的是为了获取{}中指定的对象(参数.对象等)的值如:${user.name}<====>User user = (User)request( ...

  5. Spark源码学习1.8——ShuffleBlockManager.scala

    shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager.shuffle文件有三个特性:shuffleId,整个shuffle stag ...

  6. 北大poj-1011

    木棒 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 136132   Accepted: 32036 Description ...

  7. 《Linux内核分析》实验一

    陈智威,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课堂学习笔记: 作业截图: 汇编代码堆栈分析: ...

  8. iOS中block的用法 以及和函数用法的区别

    ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的 ...

  9. Pycharm中使用GitHub

    Pycharm是当前进行python开发,尤其是Django开发最好的IDE.GitHub是程序员的圣地,几乎人人都在用. 本文假设你对pycharm和github都有一定的了解,并且希望在pycha ...

  10. Android开源控件PhotoView的使用

    整体来说,它是一个更高级的ImageView,支持缩放,多点触控缩放,滚动和滑动,单机,长按等事件: PhotoView的git托管地址:https://github.com/chrisbanes/P ...