`
javasogo
  • 浏览: 1826129 次
  • 性别: 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 消息机制 基本操作

    在Microsoft Foundation Classes (MFC)库中,消息机制是核心组成部分之一,它使得开发者能够创建交互式的Windows应用程序。MFC消息机制是基于Windows操作系统的消息驱动模型构建的,它将Windows API封装为C++类,...

    MFC消息处理源代码

    学习这部分源代码,你可以深入理解MFC如何封装和处理Windows消息,以及如何通过消息映射机制来组织代码。同时,对于Windows GUI编程的基础知识,如窗口生命周期、绘图原理、控件交互等,也会有更深入的理解。此外,...

    mfc学习资料——消息映射

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

    MFC教程lesson 4-MFC消息映射机制.rar

    MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序开发。在MFC中,消息映射机制是核心概念...在MFC教程中,学习和实践这一机制是深入理解MFC并提升Windows应用开发能力的关键步骤。

    MFC消息响应测试

    本文将深入探讨MFC消息响应机制,以及如何通过纯代码设计对话框。 首先,我们来看MFC中的消息响应。在Windows应用程序中,用户与界面的交互都以消息的形式进行,如鼠标点击、键盘输入等。MFC通过消息映射机制...

    C++MFC学习资料整合大全

    5. **消息映射与处理**:MFC使用消息映射机制将消息与函数关联,通过ON_MESSAGE、ON_COMMAND等宏定义,使得消息的处理更加简洁。每个MFC类都有一个消息映射表,用于处理特定的消息。 6. **控件和用户界面**:MFC...

    MFC.rar_MFC 消息_MFC保存_mfc主播sixting

    首先,我们来了解MFC的消息机制。在Windows应用程序中,消息是系统和应用程序之间进行通信的基本方式。MFC将Windows的消息映射到C++成员函数,使得处理消息变得更加方便。在MFC中,每个窗口类都有一个消息映射表...

    模拟MFC消息循环.rar

    在Windows编程中,MFC(Microsoft Foundation Classes)是一个C++库,它提供了对Windows API的封装...这个压缩包提供的示例程序是一个实践学习的好素材,可以帮助你巩固MFC消息循环的知识,并且通过实际操作加深理解。

    MFC运行机制

    综上所述,MFC不仅为Windows应用程序的开发提供了强大的功能和便捷性,而且其内部结构和实现机制也非常值得深入学习。无论是对于初学者还是经验丰富的开发者来说,掌握MFC的基本原理都是非常有价值的。

    VC-mfc.rar_MFC 消息_MFC 项目_MFC项目

    《深入理解MFC:从消息到项目》 ...通过学习MFC的消息机制和项目构建过程,我们可以更好地理解和掌握Windows程序设计的核心技术。同时,实践中的大型项目源码分析是深化理论知识、提升编程技能的重要途径。

    类似MFC的消息处理的封装

    在编程领域,MFC(Microsoft Foundation Classes)是微软提供的一套C++库,它用于简化Windows应用...总的来说,这个封装提供了一种学习和理解Windows消息处理机制的方式,同时也是对MFC消息处理模型的一个简化实现。

    MFC.rar_MFC_MFC学习_MFC学习资料-_mfc 资料_mfc学习资料

    3. **消息映射机制**:MFC通过消息映射机制将消息与成员函数关联,使得处理Windows消息变得简单。开发者只需要在头文件中定义消息映射,并在源文件中实现对应的消息处理函数。 4. **类库的层次结构**:MFC类库由多...

    MFC六大核心机制.doc

    《MFC六大核心机制解析——以程序...随着对MFC其他五大核心机制——运行时类型识别(RTTI)、动态创建、永久保存、消息映射和消息传递的深入学习,我们将能更全面地掌握MFC的精髓,从而更高效地构建Windows应用程序。

    第三章MFC的消息和命令

    【第三章MFC的消息和命令】深入探讨了MFC(Microsoft Foundation Classes)框架下的消息处理机制,这是在Windows环境下进行面向对象编程的关键概念。MFC是C++对Windows API的一种封装,提供了更高级别的抽象,使得...

    学习MFC的一些很不错的资料

    1. **MFC架构**:了解MFC如何基于Windows消息机制工作,以及它是如何将API函数封装成C++类的。 2. **基础类**:深入研究CWinApp、CWnd、CDialog、CButton、CEdit等核心类,理解它们在Windows程序中的角色。 3. **...

    第四课 MFC消息映射机制的剖析 讲述如何运用ClassWizard 2.rar

    在本课程中,我们将深入探讨MFC(Microsoft Foundation Classes)框架中的消息映射机制,并重点关注如何有效利用ClassWizard工具来简化这一过程。MFC是微软为Windows应用程序开发提供的一种C++类库,它极大地简化了...

    MFC学习代码及笔记

    MFC使用消息映射机制来处理Windows消息。开发者通过在头文件中定义消息映射宏,将特定的消息与函数关联起来。例如,ON_BN_CLICKED宏用于处理按钮点击事件。这样,当用户在界面上执行操作时,相应的函数会被调用。 ...

    第四课 MFC消息映射机制的剖析 讲述如何运用ClassWizard 1.rar

    MFC(Microsoft Foundation ...学习完这个课程,开发者应能熟练掌握MFC消息映射的原理和ClassWizard的使用,从而更高效地开发MFC应用程序。在实际项目中,结合这些知识,可以构建出响应性强、功能丰富的Windows应用。

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

    特别是深入探讨了MFC的消息映射与消息处理机制,这是Windows编程中非常核心的一个部分。第3篇专注于窗口编程,包括自定义控件、优化程序界面以及如何控制MFC的文档/视图框架结构,这些内容涉及到了Windows应用程序的...

Global site tag (gtag.js) - Google Analytics