利用WM_NCHITTEST消息实现无标题窗口的拖动

本文介绍了如何通过处理WM_NCHITTEST消息来实现在无标题窗口的客户区内进行拖动操作。在对话框或视图程序中,通过在WM_NCHITTEST消息处理函数中根据鼠标坐标判断是否在特定区域内,从而决定返回HTCAPTION或HTTRANSPARENT,以达到在特定区域拖动窗口的效果。示例代码分别展示了在视图类和框架类中的实现方法。
摘要由CSDN通过智能技术生成

  利用WM_NCHITTEST消息实现无标题窗口的拖动

 

Windows首先确定鼠标点中了哪个窗口,然后向那个窗口发送一个WM_NCHITTEST消息找出此窗口的哪个"非客户区"(如边界、最大化/最小化按钮、菜单、标题等等)拥有鼠标光标。接着默认的窗口过程响应消息并返回一个特定的代码。如果鼠标指针落在标题栏中,那么这个特定代码就是HTCAPTION,此时Windows便进入拖拽模式,以便用户能够对窗口进行移 动操作。所以要想在客户区里用鼠标拖动对话框,那么只要在客户区里模仿标题栏里的鼠标拖动行为即可。

    如果应用不是一个纯粹的对话框程序,而是是包含CFormView或其它非对话框视图,处理方法几乎是一样的,只需在视图代码中做一点小小的改动即可,因为Windows在发送WM_NCHITTEST消息时,是将它发送到鼠标光标下的框架/视图最顶层非透明窗口,由于视图首先获得WM_NCHITTEST消息。所以只要在视图的WM_NCHITTEST消息处理例程中返回HTTRANSPARENT,让视图对鼠标点击"透明"即可。这样做以后,Windows将忽略视图并继续搜索能接收WM_NCHITTEST的窗口。如果顺利的话,将找到父窗口,这时用与对话框相同的WM_NCHITTEST处理代码即可,即在客户区中的点击返回HTCAPTION。你甚至可以通过鼠标坐标的象素计算,在规定的局部范围内实现视图透明。
      下面以一个实例说明,窗口单文本的视图客户区,按上面所说在主框架Frame类和View类中都要添加WM_NCHITTEST消息响应函数,如果在classWizard中没找到此消息,则要在classWizard最右边的页选项Class info中的Message filter中选则Windows,就可以添加此消息了。此实例要实现鼠标移动客户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值