非客户区消息 (转载)

非客户区域消息

  如果鼠标在窗体除客户区域外的部分引发鼠标事件的话,窗体就会收到一个非客户区域消息。非客户区域由边框、菜单栏、标题栏、滚动条、系统菜单、最小化、最大化组成。

  非客户区域消息主要是为了系统自身使用,比如,当热点移到窗口边框上时,系统用非客户区域消息把鼠标光标变为两个箭头的光标。窗体必须传递非客户区域消息给DefWindowProc函数,以便利用内置的鼠标处理接口。

  对于客户区域的鼠标消息来说,也有一个非客户区域的鼠标消息对应。名字也很类似,只不过非客户区域消息的常量中包含了“NC”。例如,非客户区域内移动光标将产生WM_NCMOUSEMOVE消息,按下鼠标左键将产生WM_NCLBUTTONDOWN消息。

  非客户区域消息的lParam参数是包含热点x坐标及y坐标的结构,同客户区域坐标系不同,该坐标是以屏幕坐标系来表示的。屏幕坐标系的(0,0)点表示屏幕的左上角。

  wParam参数包含一个hit-test值,hit-test用来指出非客户区域消息是在哪引发的。下面就会对hit-test作详细介绍。

WM_NCHITTEST消息

  只要鼠标事件产生,系统就会发送一个WM_NCHITTEST消息到鼠标热点所在窗口或鼠标捕获的窗口。系统根据该消息确定应该发送一个客户区域消息还是非客户区域消息。要想接收鼠标移动及鼠标键消息,就要求应用程序必须在调用DefWindowProc函数时传递WM_NCHITTEST消息。

  WM_NCHITTEST消息的lParam参数包含鼠标热点的屏幕坐标,DefWindowProc函数会检查该坐标,并返回一个hit-test值,其中包含了热点的位置。hit-test值可以为下列值之一:

热点所在位置
HTBORDER 不能改变大小的窗口的边框
HTBOTTOM 下边框
HTBOTTOMLEFT 边框的左下角
HTBOTTOMRIGHT 边框的右下角
HTCAPTION 标题栏
HTCLIENT 客户区域
HTCLOSE 关闭按钮
HTERROR 屏幕背景或窗口间的分界线上(与HTNOWHERE相同,但不包括DefWindowProc函数引发beep的错误的位置)
HTGROWBOX 缩放格(同HTSIZE)
HTHELP 帮助按钮
HTHSCROLL 水平滚动条
HTLEFT 窗口的左边框
HTMENU 菜单中
HTMAXBUTTON 最大化按钮
HTMINBUTTON 最小化按钮
HTNOWHERE 屏幕背景或窗口间的分界线上
HTREDUCE 最小化按钮
HTRIGHT 窗口的右边框
HTSIZE 缩放格(同HTGROWBOX).
HTS
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值