MFC 对话框中实现任意地方拖拽功能

本文介绍了在MFC对话框中实现任意位置拖拽功能的方法。通过处理WM_NCHITTEST消息,将鼠标移动到对话框上的行为模拟为在标题栏上操作,以实现拖拽。同时,解决了使用WM_LBUTTONDOWN消息响应鼠标点击后的拖拽问题,确保了WM_MOUSEMOVE消息的正常处理。
摘要由CSDN通过智能技术生成

          最近公司做一个小的客户端程序,要求用MFC可怜我一直没有好好学过MFC。导致自己狂搜一气google,baidu可是帮了大忙,还算是两天把工作要求的功能实现了。今天讲了一下后续工作安排,恐怕我有点心颤了。近期恐怕要抓紧学习MFC了。在一个好友的意见下以后也把整个项目中遇到的所有问题用blog的方式记录下来。如果有人能用得着,也算没白用心。技术么,永远都要和大家分享才更有意思。好了闲话不说了,开始正文。

做了一个对话框,想要实现拖拽功能。因为我对话框用CImage贴图贴的jpg图片,就没有标题栏了。可是不能拖拽是不行的啊。只好下功夫找了。

网上介绍了一种方法在WM_NCHITTEST(鼠标在对话框上移动就会触发这个消息)消息中处理,当鼠标移动到对话框上时,把全部对话框都强制变为Title-Bar。

afx_msg UINT OnNcHitTest(CPoint point );
 


这个是函数原型CPoint制定了当前鼠标移动的位置,返回值是一个枚举,就是当前鼠标所在区域的类型HTCAPTION 就是 Title-Bar。

所以只要在这个函数中写上如下语句就可以实现在任意位置拖拽了。

LRESULT OnNcHitTest(CPoint point)
{
     CRect rc;

     GetClientRect(&rc);
     ClientToScreen(&rc);

    return rc.PtInRect(point) ? HTCAPTION : C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值