`
dyx1024
  • 浏览: 114805 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

MFC的消息机制学习

 
阅读更多

一.SendMessage()PostMessage()

1.SendMessage():

被发送的消息直接调用该窗口的窗口进程,通信是即时的,直到窗口进程为调用函数返回一个结果后,程序才能继续;

2.PostMessage():

把消息发送到拥有那个窗口的应用程序消息队列中,一有空闲,程序搜索消息队列,并在消息队列中处理消息,即从消息 队列中删除它们,并将它们发送到指定窗口;调用函数发送消息后就返回,结果只表示消息寄送成功与否,而不是被调用 进程的结果.

3.比较:

鼠标与键盘消息通常为PostMessage,其他消息通常为SendMessage;

4.MFC发送消息:

a.LRESULT res= pWnd->SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam); pWnd指针指向目标CWnd类对象;

b.发送消息到一个没有CWnd类对象的窗口: LRESULT res = ::SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); hWnd为目标窗口句柄

5.MFC寄送一个消息:

PostMessage(),返回值与SendMessage()不同,为一个BOOL值,表示是否放入消息队列; 检索一个寄送消息:

两种删除消息队列中的消息:

a.看消息是否在:  BOOL res = ::PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsFilterMin, UNIT wMsgFilterMax, UINT wRemoveMsg);

b.等待消息并删除:  BOOL res = ::GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);

.MFC中的三种消息类型:

窗口消息,命令消息,控件通知

1.窗口消息: 创建,删除,销毁窗口,

消息格式:Message:WM_XXX

wParam: 定义的命令

lParam: 定义的命令

2.命令消息:与用户请求相关,单击工具栏与菜单

消息格式:

essage:WM_COMMAND

wParam:0 or CommandID

lParam:0

有些控件通知也用WM_COMMADN,两种消息唯一区分方法是lParam是否为NULL;

3.控件通知:如打开组合框

三种格式:

1. Message:WM_XXX  WM_PARENTNOTIFY, WM_HSCROL

wParam:定义的命令

lParam定义的命令

2. Message:WM_COMMADN

wParam:XN_XXX, 控件ID, eg.EN_CHANGE;

lParam:窗口句柄

3.

Message:WM_NOTIFY

wParam:控件ID

lParam:指向NMHDR的指针,此结构包括通知控件的任何内容NMHDR:通知消息头(Notification Message Header)

MFC接收一个寄送的消息

存在一个消息泵,在CWinAppRun()中,程序开始,Run被调用;Run()将时间分为两部分:

第一部分:执行后台处理:如取消临时CWnd对象

第二部分:检查消息队列:新消息进来时.Run()GetMessage()从队列中取出它,运行两个翻译函数,然后用DispatchMessage()调用此消息预期的目标窗口进程;其中两个翻译函数为:

a. PreTranslateMessage():

MFC类用它在发送消息给它前进行消息翻译,如将加速键转换成命令消息;

b.::TranslateMessage()为一个窗口函数,将原始键码转换成键字符消息被DispatchMessage()发送后,处理它就跟SendMessage()发送的消息一样了.

四.MFC处理一个接收到的消息; 

目的:将消息指向一个函数; 

MFC:

1. AfxWndProc()接收消息,寻找消息所属CWnd对象,然后调用AfxCallWndProc()

2. AfxCallocWndProc()存储消息供以后参考,然后调用WindowProc()

3. WindowProc()发送消息给OnWndMsg(),然后,如果消息未被处理,刚发送给DefWindowProc()

4. OnWndMsg()要么为WM_COMMADN消息调用OnCommand(), 要么为WM_NOTIFY消息调用OnNotify() OnWndMsg()查找类的消息映像,以找到一个能处理任何消息的处理函数,如果没找到,就把消息返回到WindowProc(),由它把消息发送给DefWindowProc();

5. OnCommand()查看是不是一个控件通知(lParam不是NULL),如是,OnCommand就将消息映射到制造通知的控件;如不是.或者控件拒绝 映射的消息,OnCommand()就调用OnCmdMsg();

OnNotify()也试图将消息映射到制造通知的控件,如不成功,OnNotify()就调用相同的OnCmdMsg();

MFC程序不用case,其处理方式如下,指引输入消息到处理函数

分享到:
评论

相关推荐

    MFC消息映射机制的剖析

    本书不同于一般的讲述VC++使用的书籍,本书主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习VC++编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解和掌握Windows的程序设计。...

    MFC消息机制完全解读

    本文档时候初学者,学习mfc,该文档把mfc的消息机制说的很透彻

    mfc学习资料——消息映射

    这里详细介绍了mfc的消息映射机制,对于学习mfc的人很有帮助

    《精通MFC程序设计》,经典MFC编程学习教材

    《精通MFC程序设计》分9篇共30章,内容涵盖了Windows-VC-MFC、MFC框架及消息处理机制、MFC通用控件和对话框编程、文档-视结构、MFC数据库编程、MFC网络编程、注册表编程、进程线程和DLL、异常与调试以及.NET MFC应用...

    VC++/MFC/C++学习笔记

    MFC的学习笔记,从windows API处理,消息响应机制,MFC框架,MFC内部机制,到MFC控件,MFC类库使用,多线程,DLL,数据库等

    Visual C++ 权威剖析——MFC的原理、机制与开发实例.part3/6

    第2篇介绍MFC的核心机制,重点剖析窗口封装类CWnd及其派生类,以及Windows窗口操作的相关内容,阐释了MFC的消息映射与消息处理机制;第3篇讲解了窗口编程,包括自定义控件、优化程序界面以及如何控制MFC的文档/视图...

    Visual C++ 权威剖析——MFC的原理、机制与开发实例.part1/6

    第2篇介绍MFC的核心机制,重点剖析窗口封装类CWnd及其派生类,以及Windows窗口操作的相关内容,阐释了MFC的消息映射与消息处理机制;第3篇讲解了窗口编程,包括自定义控件、优化程序界面以及如何控制MFC的文档/视图...

    VC++6.0MFC入门学习

    2、理解Windows的消息机制,窗口句柄和其他GUI句柄的含义和用途。了解和MFC各个类功能相近的API函数。 3、一定要理解MFC中消息映射的作用。 4、训练自己在编写代码时不使用参考书而是使用Help Online。 5、记住一些...

    Visual C++ 权威剖析——MFC的原理、机制与开发实例.part5/6

    第2篇介绍MFC的核心机制,重点剖析窗口封装类CWnd及其派生类,以及Windows窗口操作的相关内容,阐释了MFC的消息映射与消息处理机制;第3篇讲解了窗口编程,包括自定义控件、优化程序界面以及如何控制MFC的文档/视图...

    MFC 编程入门教程55篇完整版.pdf

    VS2010/MFC 编程入门之五(MFC 消息映射机制概述) 第三部分:对话框 VS2010/MFC 编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC 编程入门之七(对话框:为对话框添加控件) VS2010/MFC 编程...

    Visual C++权威剖析--MFC的原理、机制与开发实例

    第2篇介绍mfc的核心机制,重点剖析窗口封装类cwnd及其派生类,以及windows窗口操作的相关内容,阐释了mfc的消息映射与消息处理机制;第3篇讲解了窗口编程,包括自定义控件、优化程序界面以及如何控制mfc的文档/视图...

    MFC完全自学资料,基础教程+图+详细说明,从此不怕MFC

    1_MFC概述, 2_MFC和Win32, 3_CObject类, 4_消息映射的实现, 5_MFC对象的创建, 6_应用程序的退出, 7_MFC的DLL, 8_MFC的进程和线程, ...基本覆盖了MFC的基础内容,无论是学习还是参考,都是不错的资料!!!

    MFC运行机制的剖析,很详细的一些基础问题的说明

    MFC运行机制的详解,一些一般的问题的基本详解,非常适合于初学者入门来学习和交流!!!

    Visual C++ 权威剖析——MFC的原理、机制与开发实例.part2/6

    第2篇介绍MFC的核心机制,重点剖析窗口封装类CWnd及其派生类,以及Windows窗口操作的相关内容,阐释了MFC的消息映射与消息处理机制;第3篇讲解了窗口编程,包括自定义控件、优化程序界面以及如何控制MFC的文档/视图...

    MFC深入浅出带目录完整版(李久进chm版)

    第四章,讨论MFC的消息映射机制,分析MFC对各类消息的处理,例如对Windows消息、控制通知消息、命令消息、状态更新消息、反射消息的处理等;并揭示了MFC通过消息映射手段实现C++虚拟函数机制的原理。 第五章和第六...

    ffplay for MFC (stable)

    自己做的FFPLAY移植到VC下的开源工程:ffplay for MFC。 本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC...通过本程序可以学习视频播放器原理,以及SDL和Windows消息机制等。代码中包含了比较详细的注释。

    MFC深入浅出(李久进)图全

    第四章,讨论MFC的消息映射机制,分析MFC对各类消息的处理,例如对Windows消息、控制通知消息、命令消息、状态更新消息、反射消息的处理等;并揭示了MFC通过消息映射手段实现C++虚拟函数机制的原理。 第五章和第六...

    深入解析MFC

    如果做到以下几点,你就可以成为一位透彻理解MFC实现细节的专家:探索MFC文档/视图结构的内幕,从而学习视图同步、打印和打印预览;更深入地了解MFC序列化中那些没有文档记录的方面和一些没有文档记录的类,例如...

    MFC综合实战项目

    对mfc初学者了解mfc运行机制及其api函数的区别有很大的帮助,同时对学习完mfc想做项目的同学好处大大的

    精通MFC程序设计,深入细致的讲解MFC

    通过对本资料的学习,大家可以比较细致的掌握MFC的运行机制,为更深入的学习windows运行机制奠定基础

Global site tag (gtag.js) - Google Analytics