文章来源:http://blog.csdn.net/yingzheng1983/article/details/3135858
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结构
支持信息
Windows NT/2000/XP:Included in Windows NT 3.1 and later.
Windows 95/98/Me:Included in Windows 95 and later.
分享到:
相关推荐
NCLBUTTONUP, WM_NCRBUTTONDBLCLK, WM_NCRBUTTONDOWN, WM_NCRBUTTONUP, WM_NCMBUTTONDBLCLK, WM_NCMBUTTONDOWN, WM_NCMBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_NCMOUSEMOVE, WM_MOUSEACTIVATE, WM_NCHITTEST, WM...
`AllowTransparency`属性允许窗体具有透明度,而`WM_NCHITTEST`消息则决定了鼠标在窗体上的位置如何被解释。 1. **设置允许透明**: 首先,在窗体的构造函数或`Load`事件处理程序中,设置窗体的`AllowTransparency...
WM_NCHITTEST消息用于确定鼠标位置相对于非客户区的位置,而WM_NCPAINT消息则处理非客户区的绘制。 2. **定义边框样式**:根据设计需求,定义边框的样式,包括宽度、颜色、形状等。这可以通过创建自定义控件或者在...
True则只显示加入的窗体句柄消息 EnableClassName和EnableHwnd设置不一致时,以EnableClassName为准5、DisableFrequent:是否过滤掉WM_NCHITTEST、WM_SETCURSOR、WM_ENTERIDLE、WM_NOTIFY出现频繁的消息6、HookType:...
在处理WM_NCHITTEST消息时,我们可以判断鼠标位置是否接近窗口的边框,并根据距离调整返回值,从而改变窗口的行为。 以下是实现磁性窗体的基本步骤: 1. **重写OnNcHitTest**:在自定义的CWnd派生类中,我们需要...
1. **消息过滤**:在窗体类中添加消息处理函数,捕获系统发送的WM_NCHITTEST消息。这个消息告诉窗体当前鼠标位置相对于窗体的非客户区(如边框和标题栏)是什么部分。 2. **坐标转换**:根据鼠标位置,计算出与屏幕...
当`m.Msg`等于`WM_NCHITTEST`时,说明系统正在询问鼠标位置。根据`m.Result.ToInt32()`的值,我们可以判断鼠标是否在标题栏、客户区或其他区域,并相应地调整`m.Result`,从而改变默认行为。 例如,如果鼠标在客户...
创建程序的步骤通常包括在C++ Builder中创建一个应用程序,设置窗口属性,并编写相应的代码来处理用户交互,例如,通过响应WM_NCHITTEST消息来实现窗口的拖动。 6. 控件和组件: 文档中提到了ImageIcon组件,这是一...
此外,为了让窗体在失去焦点后仍然可以拖动,还需要在窗体的`WndProc`方法中处理`WM_NCHITTEST`消息。这个消息决定了鼠标在非客户区(即窗体边框之外)的行为。以下是一个简单的实现: ```csharp protected ...
开发者可能会使用`WM_NCHITTEST`和`WM_SIZE`消息来实现自定义的大小调整逻辑。 2. **ResizingDialog.h**:这是对应的头文件,包含了`ResizingDialog`类的声明。头文件通常包含类定义、函数原型、枚举和其他需要在多...
4. 处理拖动:响应`WM_NCHITTEST`消息,当鼠标在窗口边缘时返回特定值,允许用户通过按住鼠标左键拖动来移动窗口。 5. 计算大小:覆盖`WM_NCCALCSIZE`消息处理,以便在调整窗口大小时正确地绘制不规则形状。 在提供...
为了让窗口看起来更加友好,我们可能还需要处理消息,例如WM_NCCALCSIZE和WM_NCHITTEST,以处理窗口的边缘拖动和最大化/最小化行为。这通常在`WndProc`窗口过程函数中完成: ```cpp LRESULT CALLBACK WndProc(HWND ...
2. **处理鼠标消息**:为了实现手动拖动调整窗口大小,我们需要捕获鼠标的WM_NCHITTEST消息。当用户在窗口边缘按下鼠标时,系统会发送此消息,我们可以通过返回不同的值来告诉系统用户是在哪里点击的,例如HTTOP、...
2. 实现窗口消息处理:你需要重写On_WM_NCHITTEST()消息,以便在用户鼠标点击时识别出窗口边缘,决定窗口是否应该停靠。 3. 处理WM_SIZING消息:当用户拖动窗口边缘时,你需要处理WM_SIZING消息,更新窗口的位置和...
7. **无标题栏移动窗口**:在MFC中,通常通过响应`ON_WM_NCHITTEST`消息来实现无标题栏窗口的拖动。当鼠标在窗口边缘区域时,返回`HTCAPTION`,使得窗口可以被拖动。 8. **保存图像**:保存图像文件到本地通常需要...
通常,你需要处理`WM_NCHITTEST`消息,并在适当的位置返回`HTCAPTION`,这样用户就可以在窗口的标题区域拖动窗口。 3. **缩放逻辑**: 缩放无边框对话框通常涉及到处理`WM_SIZE`消息。当用户改变窗口大小时,这个...
窗口在接收到特定的消息(如WM_NCHITTEST、WM_NCMOUSEMOVE等)时,会根据鼠标的当前位置和窗口的状态执行相应的操作。在实现抖动窗口时,开发者需要捕获这些消息,并在适当的时候改变窗口的位置。 其次,易语言中的...
要解决描述中提到的问题,开发者需要深入理解Windows API,特别是与窗口管理相关的部分,如`WM_NCHITTEST`消息用于识别鼠标位置,以及`SetWindowLong`和`GetWindowLong`函数来更改窗口样式和行为。对于窗体大小改变...
- **消息处理**:添加按钮后,需要捕获和处理WM_NCCALCSIZE、WM_NCPAINT、WM_NCHITTEST等消息,以确保按钮的正确显示和交互。 - **按钮状态管理**:NCButtonManager类可能会跟踪每个按钮的状态,如是否被按下、是否...
这些细节通常涉及到Windows消息机制,如WM_NCHITTEST、WM_SIZE和WM_MOUSEMOVE等消息,以及对话框的OnSize()和OnNcCalcSize()成员函数。 "ResizeDlgTest"文件可能是示例项目的源代码或编译后的可执行文件。如果它是...