[MFC入门一]基于消息,事件驱动(Message Based,Event Driven)

简介:
  学习了一些C++,对C++的语法也基本上有所了解了,由于偶是一个C++的业余爱好者,也一直应用.NET操作系统,没什么机会到Linux等系统下去运行。所以VC++也是我的目标,喜欢上了游戏,也喜欢外挂但是用.NET来搞这些总觉得不爽,C++才是不错的选择。本系列将记录本人学习MFC的一个过程,也可以称为笔记,今天来看看MFC中的消息。
    MFC程序基于消息,而使用事件驱动。也就是说MFC就是一个死循环,里面有很多的条件,每个条件对应一个方法。这些条件就是有消息类定义,当用户触发事件时,将发送消息到响应的窗口。当程序收到消息时进行解析,判断如果符合条件,将运行当前事件的处理方法。

MSG msg;
while (GetMessage( & msg,NULL,NULL,NULL))
{
    TranslateMessage(
& msg);
    DispatchMessage(
& msg);
}
    每一个程序都存在上述的循环,而MSG是一个结构,是Windows内设的一种数据格式,可以在WinUser.h中找到,代码如下:
/*
 * Message structure
 
*/
typedef 
struct  tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam;
    LPARAM      lParam;
    DWORD       time;
    POINT       pt;
#ifdef _MAC
    DWORD       lPrivate;
#endif
} MSG, 
* PMSG, NEAR  * NPMSG, FAR  * LPMSG;
    接受并处理消息的主角是窗口,每一个窗口都必须要有能够处理消息的方法,称为“窗口函数”(Window Procedure/Function)。当窗口获得消息后,必须判断消息的类别,将消息转换(TranslateMessage(&msg)转换键盘消息),然后将消息传递到(DispatchMessage(&msg))窗口函数去处理。
    窗口函数是一个回调函数(用户定义的函数用于Windows操作系统调用的函数),它的形式如下所示。
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)

    其中wParam和lParam的意义因消息的不同而不同,但可以知道的是wParam的位数是随着操作系统的位数而定的,在32位的操作系统中为32位,当然64位的就为64位。知道了这个函数后,如果要将每一个消息对应到响应的处理函数中就需要如switch/case结构来判断,为了让程序更好的模块化,需要了解Message Map(消息映射)的原理,今天就先初步了解一下Message是怎么回事。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/10/24/mfc_message_first.html,如需转载请自行联系原作者

相关文章
|
3月前
|
设计模式 开发者 UED
理解Visual Basic中的事件驱动编程模型
【4月更文挑战第27天】本文介绍了Visual Basic中的事件驱动编程模型,阐述了事件驱动编程的基本概念,包括事件、事件源和事件处理。在VB中,事件处理通过界面设计与代码分离实现,开发者可直观绑定事件并编写处理函数。文章还讨论了事件参数、事件链式响应和优先级,以及事件驱动模型的优势(如响应性和模块化)和挑战(如调试困难和性能问题)。最后,提出了实践技巧和优化策略,如简化事件处理、管理事件订阅、异步处理和应用设计模式,以提升程序效率和可维护性。
50 1
|
3月前
|
分布式计算 大数据 API
|
11月前
事件驱动events
事件驱动events
|
中间件 Serverless
事件驱动(Event driven)
事件驱动(Event driven)自制脑图, 是函数计算的最重要的特质之一,正是由于函数计算和事件源的深度集成,使得函数计算服务成为处理云服务事件最便捷的一种方式,让用户无需自行搭建各类中间件,方便的构建使用云上各种能力的应用。 函数计算近期发布了异步调用目标功能,让函数计算不仅可以作为事件的消费者,也成为了事件的生产者。该功能还增强了异步执行函数的可观测性,让用户更方便的构建基于事件驱动的应用。
148 0
事件驱动(Event driven)
事件驱动(Event driven)——函数的异步调用方式总结
事件驱动(Event driven)——函数的异步调用方式总结自制脑图, 函数的异步调用方式有利于拉平负载,提高任务的成功率,但也带来了一系列挑战。我们结合用户的实际场景,可总结为下述几类:
134 0
事件驱动(Event driven)——函数的异步调用方式总结
事件驱动(Event driven)——异步调用策略的可定制性
事件驱动(Event driven)——异步调用策略的可定制性自制脑图
70 0
事件驱动(Event driven)——异步调用策略的可定制性
|
Serverless
事件驱动(Event driven)——函数计算异步调用
事件驱动(Event driven)——函数计算异步调用自制脑图
84 0
事件驱动(Event driven)——函数计算异步调用
|
C++
Writing a simple publisher and subscriber (C++):编写一个简单的发布者和订阅者(C++)
Writing a simple publisher and subscriber (C++):编写一个简单的发布者和订阅者(C++)
132 0
SAP WM 高阶之2-Step Picking for Outbound Delivery
SAP WM 高阶之2-Step Picking for Outbound Delivery
SAP WM 高阶之2-Step Picking for Outbound Delivery
SAP UI5 subscribe event实现原理
Created by Wang, Jerry, last modified on Feb 05, 2015
123 0
SAP UI5 subscribe event实现原理