What's the Secret between Message and Handle in Windows?

要学习 Windows 编程,首先就要了解 Windows 是如何工作的。所有编程的骨架都是响应和发送消息。

l          什么是消息?

消息 (message) 就是一个指定事件的 32 比特数。例如,若移动鼠标,就会向活动窗口上发送一条 WM_MOUSEMOVE 消息。若按下某个键,就会向活动窗口上发送一条 WM_KEYDOWN 消息。若改变窗口的大小,则会往活动窗口上发送一条 WM_SIZE 消息,等等。

l          消息都到哪里去了?

    这些消息都到哪里去了呢?它们将排队等候,最终将有窗口把它们从队列中取出,并做出相应的反应。例如,当窗口获取 WM_MOVE 消息后,它更改窗口的坐标,并在屏幕上重绘窗口。

l          句柄是什么?

Windows 具有很强的面向对象特性。 Windows 对象有很多,譬如桌面、读取所使用的程序等等。在非面向对象语言中,程序员如何区分这些东西呢?使用句柄。

句柄是引用不同 Windows 对象的方式。可以使用 Windows 的句柄、文件的句柄、分配内存的句柄、图像的句柄等等。

可以将这些句柄看作指针。必须用某种方式创建这些句柄。当不再使用它们时,应当销毁它们。如果不销毁它们,最终将导致资源泄漏 (resource leak) 。资源泄漏将导致系统崩溃。所以,务必确保在适当的时候销毁不再使用的句柄。

l          消息与句柄的关系?

现在将消息和句柄联系起来。假如有一个窗口,且拥有该窗口的一个句柄 ( 称做一个 HWND) 。命名句柄为 your_HWND 。因为其他窗口刚刚从该窗口上移走,操作系统希望重绘窗口。 Windows 传递如下所示消息:

PostMessage(your_HWND, WM_PAINT, 0, 0);

这个函数通过句柄 your_HWND 给窗口发送了一条绘制消息。最后两个参数用作消息的额外信息,

应用程序中有一个函数用一个庞大的 case 语句来处理所有消息。例如:

void HandleTheMessage(long Message)

{

       switch (Message)

       {

       case WM_PAINT:

              DrawWindow();

              break;

       case WM_KEYDOWN:

              break;

 

       // etc.

       }

}

²         总结: 以上就是 Windows 的大致工作过程。了解这些原理后,就可以开始学习 MFC 了。

下面是 Windows 窗口程序的基本框架。

参考 : CodeGuru Visual C++ 编程精粹   wcdj   2010-1-17

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值