二、显示区域鼠标消息—双击鼠标按键
双击鼠标按键是指在短时间内单击两次。要确定为双击,则这两次单击必须发生在其相距的实际位置十分接近的状况下(内定范围是一个平均系统字体字符的宽,半个字符的高),并且发生在指定的时间间隔(称为「双击速度」)内。您可以在「控制台」中改变时间间隔。
如果希望您的窗口消息处理程序能够收到双按键的鼠标消息,那么在呼叫RegisterClass初始化窗口类别结构时,必须在窗口风格中包含CS_DBLCLKS标识符:
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;
如果在窗口风格中未包含CS_DBLCLKS,而使用者在短时间内双击了鼠标按键,那么窗口消息处理程序会接收到下面这些消息:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDOWN
WM_LBUTTONUP
窗口消息处理程序可能在这些键的消息之前还收到了其它消息。如果您想实作自己的双击处理,那么您可以使用Windows函数GetMessageTime取得WM_LBUTTONDOWN消息之间的相对时间。第八章将更详细地讨论这个函数。
如果您的窗口类别风格中包含了CS_DBLCLKS,那么双击时窗口消息处理程序将收到如下消息:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_LBUTTONUP
WM_LBUTTONDBLCLK消息简单地替换了第二个WM_LBUTTONDOWN消息。
如果双击中的第一次键操作完成单击的功能,那么双击这一消息是很容易处理的。第二次按键(WM_LBUTTONDBLCLK消息)则完成第一次按键以外的事情。例如,看看Windows Explorer中是如何用鼠标来操作文件列表的。按一次键将选中文件,Windows Explorer用反白显示列指出被选择文件的位置。双击则实作两个功能:第一次是单击那个选中文件;第二次则指向Windows Explorer以打开该文件。执行方式相当简单,如果双击中的第一次按键不执行单击功能,那么鼠标处理方式会变得非常复杂。