14.4.1 鼠标发出的消息
当程序用户绘制某个形状时,他们将与特定的文档视图发生交互作用。因此,视图类明显是存放鼠标消息处理程序的地方。在Class View窗格中右击类名CSketcherView,然后从上下文菜单中选择Properties菜单项,显示它的属性窗口。然后,如果单击消息按钮(如果不知道哪个按钮是消息按钮,可以等待出现按钮工具提示),则出现一个消息ID的列表。这些消息ID是发送到视图类的标准Windows消息的ID,它们的前缀是WM_(见图14-10)。

目前需要了解如下所示的3种鼠标消息(见表14-4)。
表 14-4
|
消 息
|
说 明
|
|
WM_LBUTTONDOWN
|
按下鼠标左键时产生的消息
|
|
WM_LBUTTONUP
|
释放鼠标左键时产生的消息
|
|
WM_MOUSEMOVE
|
移动鼠标时产生的消息
|
这些消息彼此完全无关,它们都将发送到程序的文档视图中,即使程序没有提供它们的处理程序。窗口很有可能在以前没有接收到WM_LBUTTONDOWN消息的情况下接收到WM_LBUTTONUP消息。如果键按下时光标在另一个窗口上,而在释放之前移动到视图窗口,就会发生这种情况。编写这些消息的处理程序时必须牢记这一点。
如果观察一下这个属性窗口中的列表,就可以发现还可能出现其他鼠标消息。根据应用程序的需要,可以选择处理任何一种或者所有消息。概括地说,应当根据以前介绍的绘制直线、矩形、圆和曲线的过程,定义如何处理目前感兴趣的这3种消息。
1. WM_LBUTTONDOWN
这种消息将启动绘制元素的过程。所以需要:
(1) 注意元素绘制过程已经开始。
(2) 把光标当前位置作为定义元素的第一个点记录下来。
2. WM_MOUSEMOVE
这是一个中间阶段,其中将创建和绘制当前元素的临时版本,但是鼠标左键必须处于按下状态,所以需要完成如下步骤:
(1) 检查左键是否已经按下。
(2) 如果已经按下,则删除已经绘制的当前元素的前一个版本。
(3) 如果没有按下,则退出元素创建操作。
(4) 把光标的当前位置记录为当前元素的第二个定义点。
(5) 使用这两个定义点绘制当前元素。
3. WM_LBUTTONUP
这种消息表示绘制元素的过程已经完成,所以需要:
(1) 存储由记录的第一个点定义的元素的最终版本,同时存储鼠标键在第二个点释放时的光标位置。
(2) 记录元素绘制过程的结束。
下面将生成这3种鼠标消息的处理程序。