WMNCHitTest

  WM_NCHITTEST消息说明

当光标移动到窗体,或鼠标按下,释放时,发送WM_NCHITTEST消息,如何鼠标不被捕获,消息在窗体得到光标之后发出,否则,消息发送到捕获到鼠标的窗体。 

WM_NCHITTEST xPos = LOWORD(lParam); // 光标的水平位置(X)yPos = HIWORD(lParam); //光标的垂直位置(Y) 

Parameters(参数) 


xPos 

lParam的低次序数值(X的数值)。指定鼠标指针的X坐标,这个坐标是相对于屏幕左上部进行比效的。 



yPos 

lParam的高次序数值(Y的数值)。指定鼠标指针的Y坐标,这个坐标是相对于屏幕左上部进行比效的。 



Return Values(返回值) 

返回的值是由DefWindowProc函数所提供的下列数值之一,指出紧跟着光标的位置. 

值 活动的位置 

HTBORDER 在一个可以用鼠标自由调整大小的(有边框)的窗上边界时 



HTBOTTOM 在一个可调窗体大小的下边界水平位置时(使用者可以点下鼠标垂直的调正大小) 



HTBOTTOMLEFT 在一个可调窗体边界的左下角位置时(使用者可以点下鼠标对角的 

调窗体大小,从左下向右上调) 



HTBOTTOMRIGHT 在一个可调窗体边界的右下角位置时(使用者可以点鼠标对角的调 

窗体大小,从右下向左上) 



HTCAPTION 在一个标题栏中 



HTCLIENT 在窗体客户区 



HTCLOSE 在关闭按钮(窗体) 



HTERROR 在屏幕的后面或在窗体之间的线上(相当于HTNOWHERE,除了 

DefWindowProc函数产生的系统发出”嘟”的错误”) 



HTGROWBOX 我的理解:在窗体里(相同于HTSIZE)(原文:In a size box (same as 

HTSIZE)) 



HTHELP 在帮助按钮上 



HTHSCROLL 在水平滚动条中 



HTLEFT 在窗体的左边界上(使用者可以点击鼠标左右(水平)调窗 

体的大小) 



HTMENU 在一个菜单上 



HTMAXBUTTON 在最大化按钮上 



HTMINBUTTON 在最小化按钮上 



HTNOWHERE 在屏幕的后面或在窗体之间的线上(我的理解:两个窗体,一个前,一个 

后,点后面的窗体产生) 



HTREDUCE 在一个最小化的按钮上(原文:In a Minimize button) 



HTRIGHT 在窗体的右边界(使用者能点鼠标水平调正窗体大小) 



HTSIZE 原文: In a size box (same as HTGROWBOX 同样的HTGROWBOX) 



HTSYSMENU 在一个系统菜单上,或在一个child(子窗体)的一个关闭按钮上 



HTTOP 在一个窗体上部的边界位置上 



HTTOPLEFT 在一个窗体上部的边界的左上角 



HTTOPRIGHT 在一个窗体上部的边界的右上角 



HTTRANSPARENT 在同一程序的两个窗体,一个窗体被另一个窗体覆盖着(消息 

会传递到下面的窗体,至到其中的一个窗体离开啦,否则就发送 

HTTRANSPARENT消息) 



HTVSCROLL 在垂直滚动条上 



HTZOOM 在一个最大化按钮上(In a Maximize button) 



Remarks(评论) 

用一个MAKEPOINTS的宏将lParam转换成POINTS结构 






WMNChitTEST是截获鼠标的消息   
  我做了个移动的窗体,没有标题栏,写了个右键propomenu,   
  但是我在WMNChitTEST中是将result返回为htCaption,就可以移动它,可右键就不起作用了!   
  在窗体上双击还能最大化!   
  当我屏蔽   
  if   Msg.Result=htClient   then   
                  Msg.Result   :=   htCaption;   
  后,在窗体上点右键,菜单却跑到屏幕(注意是屏幕,不是窗体)的左上角!气死我了!   
  有什么办法可以既有点右键时菜单即在鼠标的位置显示,点左键又能移动窗体呢?   
  谢谢!   
 

你可能感兴趣的:(WMNCHitTest)