windows 消息机制

1.关于windows消息机制
消息就是windows发出的一个通知,告诉程序某个事情发生了。例如,单击鼠标、改变窗口大小等。消息本身是以一个记录的形式传递给程序的,这个记录(在C/Java中称为结构体)包含了消息的类型和其他信息。例如,对于鼠标单击事件来说,这个记录(结构体)包含了单击事件的消息号(WM_LBUTTONDOWN),数据的坐标(x,y)等信息,这个记录叫TMsg。
在C语言中的定义是:
typedef struct Msg
{
HWND hwnd; / /窗口句柄
UINT message; / /消息常量标识符
WPARAM wParam; // 32位消息的特定附加信息
LPARAM lParam; // 32位消息的特定附加信息
DWORD time; / /消息创建时的时间
TPoint pt; / /消息创建时的鼠标位置
} TMsg;
其中TPoint 也是一种结构体,其结构为:
typedef struct TPoint
{
int x;
int y; 
}TPoint;
[延伸]
在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为图标等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。
对象可以映射到唯一的句柄,句柄也可以映射到唯一的对象。
为什么我们需要句柄?
更准确地说,是windows需要句柄。windows需要向程序员提供必要地编程接口,在这些接口中,允许程序员访问、创建和销毁对象。但是,出于封装地考虑,windows并不想向程序员返回指针。指针包含了太多的信息。首先 指针给出了对象存储的确切位置;其次,要操作一个 指针,程序员必须知道指针所指对象的内部结构特征,也即,windows必须向 程序员暴露相应的 数据结构,而这些数据结构也许是操作系统想向 程序员隐藏的。
如果说COM技术向用户隐藏了数据,只暴露了接口并只允许按接口定义的方法操作数据的话,句柄这种方式则允许你按自己的方式直接操作数据,但windows又不向你直接暴露数据。直接操作数据是程序员需要的,不暴露数据是windows所需要的,句柄 封装方式实现了各取所需。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值