设为首页 加入收藏

TOP

滑鼠(十四)
2010-12-30 21:11:57 来源: 作者: 【 】 浏览:27869
Tags:滑鼠
参数等於HTSYSMENU的WM_NCLBUTTONDBLCLK讯息时,它就把wParam参数等於SC_CLOSE的WM_SYSCOMMAND讯息放入讯息伫列中(这个WM_SYSCOMMAND讯息是在使用者从系统功能表中选择「Close」时产生的)。同样地,视窗讯息处理程式也把这个讯息传给DefWindowProc。DefWindowProc通过给视窗讯息处理程式发送WM_CLOSE讯息来处理该讯息。

如果一个程式在终止之前要求来自使用者的确认,那么视窗讯息处理程式就需要拦截WM_CLOSE,否则,DefWindowProc呼叫DestroyWindow函式来处理WM_CLOSE。除了其他处理,DestroyWindow还给视窗讯息处理程式发送一个WM_DESTROY讯息。视窗讯息处理程式通常用下列程式码来处理WM_DESTROY讯息:

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;

PostQuitMessage使得Windows把WM_QUIT讯息放入讯息伫列中,此讯息永远不会到达视窗讯息处理程式,因为它使GetMessage传回0,并终止讯息回圈,从而也终止了程式。

程式中的命中测试
 

我在前面讨论了Windows Explorer如何回应滑鼠的单击和双击。显然,程式(或者更精确的说,如同Windows Explorer般使用list view control)必须确定使用者滑鼠所指向的是哪一个档案。

这叫做「命中测试」。正如DefWindowProc在处理WM_NCHITTEST讯息时做一些命中测试一样,视窗讯息处理程式经常必须在显示区域中进行一些命中测试。一般来说,命中测试中会使用x和y座标值,它们由传到视窗讯息处理程式的滑鼠讯息的lParam参数给出。

一个假想的例子
 

有这样一个例子。假设您的程式需要显示几列按字母排列的档案。通常,您可以使用list view control,他会帮您由於要做全部的命中测试工作。但我们假设您由於某种原因而不能使用,这时就需要自己来做了。让我们假定档案名保存在称为szFileNames的已排序字串指标阵列中。

让我们也假定档案列表开始於显示区域的顶端,显示区域为cxClient图素宽, cyClient图素高,每列为cxColWidth图素宽,每个字元高度为cyCh

首页 上一页 11 12 13 14 15 16 17 下一页 尾页 14/50/50
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇计时器 下一篇键盘

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: