1.真正的文件

      文件被存放在硬盘上(作为二进制),它有一套地址(可以用一个十六进制工具直接打开,并针对某个内容-这个内容必定有一个外存地址,进行编辑并保存,注意不能用记事本之类的,因为计算机只能以ASCII格式保存,会破坏原文件的地址),文件被加载入内存之后(map),又有一套内存中的地址,,一些静态分析工具就会求出这个地址对应它在硬盘上的地址(偏移地址加镜像基)

 

2.真正的数据

    从很大意义上来说,计算机是一种模拟现实的工具,计算机对现实中的数据(字符,音频,视频)的模拟实现手段是"编码",如音频,视频就是编码实现的,字符包括字母和符号,也是用ASCII码来表示的,用0和1的不同组合来表示的ASCII码是一种低层的二进制级的编码,音频,视频较之可能是高一级的编码方式,但是数据不只有字符数据,还有数组数值,它们称为"普通数据",现实中的数值在数学(专门研究"数"的科学)中分类为:(2.bmp) 

或者有理数分为整数和分数,其实给实数和有理数分类的方法有多种,关键看什么标准,由上可以看出,实数是用小数来描述的,也就是说,可以把所有的实数理解看作为小数,换句话来说,数的本质是小数,数的小数形式可以描述和表示一切可能存在的实数数值,换言之,小数与实数等价,在数值上有一一对应的关系,因此用计算机来表示数值数据只要表示了小数就成功地表示了一切数学中可能出现的实数(实际上这也是由计算机内部结构决定的,因为CPU内置浮点器),也就表示了现实生活中一切可能用到的实数,因此在计算机也称实型

3.真正的Windows消息

      消息机制和绘图机制是微软Windows及其周边其它产品与生俱来的,是Win 系列OS作为一个操作系统进行微机内部实现的二大支柱和特征,消息系统是Windows下一切应用程序间,包括Windows自身,进行交互和通讯的渠道,是Windows实现对运行在其下的所有应用程序进行控制及应用程序对Windows进行响应的解决手段,因此对Windows的编程,无论是在哪种 语言规范和IDE 下,都不可避免地要涉及到消息处理,虽然有些编程语言如 VB 用事件驱动编程机制在很大程度上封装了消息的复杂性,但若要深入Win32编程,就必须学习Windows的消息系统,正如游戏编程要掌握Win的绘图机制一样,而只要你一旦深韵了这二大支柱和基本,你就掌握了Win32编程的根本。。

       消息的产生来源于系统事情(包括计时器事件)和用户事情,Windows用消息来调入和关闭(还有其它处理,如绘制一个窗口等)应用程序,一个典型表现是在关机操作中,Windows发一个关机的消息给所有正在运行的应用程序,告知它们退出内存,此时,应用程序用回应消息的方法来响应OS,因此,消息是应用程序与WinOS交互的手段..

      消息的主体是应用程序之间和应用程序与 OS 之间,(这是通俗的说法,其实在一个应用程序的内部,各“窗口”组件之间也存在着消息的流动,窗口组件与它们的父窗口和上层窗口之间当然也有消息的传递过程("命令传递",后面在跟踪一个消息的路径中将会详谈)Windows内部即时流动的消息数量是如此的宠大,程序实现之外的手工分析是一种很自不量力的事情)消息的最终主体却是窗口与窗口之间,窗口与OS之间 - 因为在MFC的技术规范里,只有窗口进程才能发送和接收一个消息并处理它,当然一些非界面窗口类如文档类也能处理一个消息,消息的最终归宿是某个窗口类的成员函数,也就是进入消息处理函数被处理,或被某个非界面类也就是内部处理类如文档类处理,系统中默认的窗口类和用户注册的窗口类都有进程,都能在内存中创建实在的窗口对象,窗口对象和窗口类接收和处理(千万注意:接收一个消息和处理一个消息是相差甚大的二个过程,后面将在讨论重定向一个消息技术时将谈到)发往它或由它主动发往别的窗口进程或OS的消息,修改窗口进程干涉窗口进程对消息的处理过程(而不是接收过程,这个区别的详细解释请参见后面从"注意消息泵并不是一个.."起的文字)是可能的(窗口进程只是一段函数),但是如果这个窗口进程属于别人,如系统的窗口类,你将没有源程序进行修改,但却可以用消息重定的技术加以干涉,比如用户自定义的窗口类,用户完全可以自定义它的窗口进程,编写自己的消息泵,实现对消息的重定向,编写用户自己的消息泵属于Win32编程中重定向一个消息的七大技术之一。

      MFC中有七种技术可以用来重定向一个消息,它们是:1,子分类2,超分类3,OnCmdMsg(),4,SetCapture5,编写自己的消息泵,6SetWindowsHookEx(),人们常说的钩子函数,便是其中之一.

     在谈完消息泵的概念后,我们将一步一步追踪一个消息在系统中的路径,然后才能讨论对它的重定向。

     消息泵并不是一个窗口类的窗口进程,虽然它们都是函数,同样都对注入到这个窗口进程的消息进行工作,而并不最终处理消息本身(上面已经说到原因),消息泵是一个通俗的说法,它只与消息被发往窗口进程后的接收工作有关而不与处理过程有关(上面也已经说到消息的接收和处理是二不同过程),而窗口进程恰恰相反它只与处理有关不与接收有关下面开始详述。。

   消息泵被包含在 CWinApp 的成员函数Run()..........写得太累了,,,未完待续.

 

 

实际上在UML的规范里,消息是一切对象发生联系形成系统的手段。