Windows的消息使用理解

来源:互联网 发布:java怎么创建窗口程序 编辑:程序博客网 时间:2024/06/10 01:38

本工程代码下载//该工程涉及了其它事务处理

2004年7月18日, 17:04:44
------------------------------
Project: exAni_icon //动态变换图标
理解windows的消息使用方法,对于不知道的消息,通过今天这个试验,可以参看

MSDN6.0的winui.chm,这个文件列出了很多消息
消息的理解大致为:两类
一:(发送消息产生动作 调用某函数)■与直接调用某一函数效果相同■
通过SendMessage或PostMessage发送指定消息,然后由于消息机制的作用,系统

将会激活(转入执行)与之对应的响应函数(MFC类库)
如:SendMessage(WM_SETICON,ICON_SMALL,(LPARAM)hIcon);
//LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam =

0 );
可以发现SendMessage()有三个参数,其中第一个是要发送的消息,而后面两个参

数在实际应用中,我们需要怎样来确定?不难发现,这两个参数是作为响应消息

的函数的参数,而一般在消息激活时,消息本身是会去获取响应它的函数的形参

值来送给该函数作为该函数的入口值,但由于这里消息是人工产生的,而非系统

产生的(在下面第二条会很清楚的阐述),所以需要把形参值一起在发送消息时

发送
那么实际上面的这个语句是等同于下面这句的
SetIcon(hIcon,ICON_SMALL);
==(SendMessage(WM_SETICON,ICON_SMALL,(LPARAM)hIcon);)
那么我们会说何必这样麻烦,直接用SetIcon()函数就可以,干妈还要用消息来变

相调用这个函数呢?对,是可以直接调用,但这是在这个例子中,但有的时候并

并不可以直接调用(因为你根本没办法来调用)
请看下面的这个例子
二:(执行某动作而产生某消息来找到 响应事件)■在VB中,这一步已被封装■
例如用户单击按钮时,会产生WM_COMMAND消息,这时消息机制会寻找

ON_COMMAND(IDR_ABOUT, OnAbout)宏来找到对应的被该宏所映射的函数(自定义

函数)
如果这里想直接调用OnAbout()函数基本是不可能的,表面上看,好像是直接就调用了OnAbout()因为在对话框资源上双击按钮就自动进入了OnAbout()函数体很象VB中写某按钮事件一样,但实际上就在这个工程中,VC(IDE)已为你自动做好了消息映射

这个处理函数也是我们通常说的事件响应函数,我的理解其实就是回调函数。而这个消息是一个事件。

为什么会说它是一个回调函数呢?

在网上曾看到有人是这样定义回调函数

回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可
以在回调函数里完成你要做的事。被调用者回头调用调用者的函数(够咬嘴的),故称其为回调(callback)。

那么试想一下,Windows是怎样知道要调用这个函数的呢?

是通过消息映射知道的。哪又是怎么找到这个函数的呢?

这回问到重点了。所以用户需要将这个函数的指针告诉Windows。虽然在cpp文件下系统为你不能明显的看出它有地址

注册,那是因为这个注册过程已被消息映射的宏在内部完成了

这整个过程是完全满足回调函数的定义!