MFC消息分类和处理方式以及MFC程序的执行流程

一、在MFC中消息有三种类型,分为标准消息,命令消息,通告消息。他们的区别如下:

1、标准消息:

(1)除WM_COMMAND之外,所有以WM_开头的消息

(2)从CWnd派生的类,都可以接收到这类消息。

2、命令消息:

(1)来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。

(2)从CCmdTarget派生的类,都可以接收到这类消息。

3、通告消息:

(1)由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现

(2)从CCmdTarget派生的类,都可以接收到这类消息。

 

至于哪些类是从CWnd类派生出来的呢?我们可以把它的类名复制下来,在MSDN上搜索一下,就可以看到它所继承的父类,就能判断它是否从CWnd类派生。工具栏,控件等都是从CWnd类派生的类。

在一个单文档MFC程序中,CMainFrame类与View类是从CWnd类派生出来的,而App类和Doc类则不是从CWnd类派生出来的,但它们都派生自CCmdTarget类。而CWnd类也是从CCmdTarget类派生而来。

菜单属于框架窗口类,点击菜单下的按钮时,会先到View类中查找相关的消息处理函数,若找不到,就把消息传送给Doc类。若在Doc类中找不到相关的消息处理函数,Doc类会把消息返转给View类,由View类来作处理。此时View类会把消息传给CMainFrm类,若在CMainFrm类中还是找不到相关的消息处理函数,同样CMainFrm类会把消息返转给View类,由View类来作处理。最后,View类会把消息传给App类,让App类来处理该消息。


二、深入跟踪MFC程序的执行流程

单文档项目:

WinMain执行前初始化的全局变量theApp、调用WinMain函数、注册窗口、产生窗口、建立消息循环、窗口过程、窗口的销毁

SDI(单文档)界面中,菜单响应遵循这样一个顺序:菜单消息先由CMainFrame类接收,CMainFrame并不直接在内部寻找对应的相应函数,而是到CView类寻找。如果CView类有该消息的响应函数,那么就直接调用CView类中的响应函数,否则,转到CDoc类寻找,如果CDoc类中存在该消息的响应函数,那么就直接调用CDoc类中的响应函数,否则,返回到CMainFrame类寻找。如果CMainFrame类中也没有,返回到CApp类中寻找。如果在CApp类中也没有找到,表示没有该菜单的响应函数。

同时CmainFrame作为整个程序的框架,它提供了程序运行的基础环境,这里再强调介绍一下两点


1. 在CmainFrame中访问Cview对象和Cdoc对象

要访问这两个对象可以使用全局函数GetActiveDocument()和GetActiveView()这样可以获得Doc对象和View对象的实体了


2. 在CmainFrame中调用Cview对象更新窗口,这里使用方法如下:GetActiveView()->Invalidate(FALSE);// 这一句会是cview调用OnDraw消息响应函数

GetActiveView()->UpdateWindow();//这句可以加上也可以不加,暂时没有发现不加会出现什么问题。


转载出处:

http://blog.csdn.net/ljianhui/article/details/8782068

http://blog.csdn.net/ljianhui/article/details/8781991

http://www.cnblogs.com/HappyXie/archive/2011/05/06/mfc.html


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
掌握MFC Winsock版的TCP通信程序的设计流程需要以下步骤: 1. 创建MFC项目:在Visual Studio 2010中创建一个新的MFC项目,选择"Windows应用程序"模板。 2. 添加对应的MFC类:在解决方案资源管理器中,右键击"源文件"文件夹,选择"添加->类"。在类向导中,选择基类为"CSocket",输入类名,点击"添加"按钮。 3. 编写通信代码:在刚刚创建的MFC类中,编写用于建立和处理TCP连接的代码。首先,在类头文件中添加必要的成员变量和方法。然后,在源文件中实现这些方法,包括建立连接、发送和接收数据的功能。 4. 添加用户界面:在MFC应用程序中,用户界面通过对话框进行设计。打开资源视图,双击"对话框"文件夹,选择"添加->对话框"。设计一个简的对话框界面,用于用户输入和显示通信数据。 5. 处理消息和事件:在MFC框架中,使用消息映射和事件处理处理用户操作和通信事件。在MFC类中,通过添加消息映射函数实现对话框按钮的点击、菜项的选择等事件的处理。同时,在处理这些事件的函数中,调用前面编写的通信代码。 6. 编译和运行:完成以上步骤后,编译整个MFC项目并运行。确保所有代码都正确编译,并且用户界面能够显示。 以上是掌握MFC Winsock版的TCP通信程序的设计流程的基本步骤。深入理解并熟练掌握这些步骤,可以在该平台上实现更复杂和功能强大的TCP通信应用程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值