MFC 对话框中实现任意地方拖拽功能
来源:互联网 发布:基因组数据分析 编辑:程序博客网 时间:2024/05/19 22:50
最近公司做一个小的客户端程序,要求用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 : CDialog::OnNcHitTest(point);}后来这么做了以后发现一个问题,这个对话框没有办法在响应mfc中的WM_MOUSEMOVE消息了。在好友帮助下,可以用响应WM_LBUTTONDOWN的方式来进行处理。因为拖拽只是点击鼠标以后的事情,我鼠标移动完全没有必要这样。在点击鼠标按键时WM_LBUTTONDOWN消息函数中,写如下代码:
void OnLButtonDown(UINT nFlags, CPoint point){PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); CDialog::OnLButtonDown(nFlags, point);}
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));中WM_NCLBUTTONDOWN消息是在非工作区按下鼠标左键。函数原型是:
afx_msg void OnNcLButtonDown( UINT nHitTest, CPoint point );
一个参数就是一个枚举,说明当前工作区就是OnNcHitTest的返回值,我们只要填成HTCAPTION就相当于指定了当前鼠标在Title-Bar上。这样就满足了程序要求了。
- MFC 对话框中实现任意地方拖拽功能
- 实现任意地方拖拽
- 关于MFC中任意对象的拖拽功能的实现(COleDataSource, COleDropTarget)
- VS2008中,MFC对话框类实现类似QQ拖拽上传文件的功能,CWnd::OnDropFiles
- MFC中界面按钮调用(显示)对话框功能实现
- MFC中实现对话框最小化到托盘功能
- MFC打开文件对话框功能实现
- MFC实现对话框的伸缩功能
- MFC中窗口实现拖拽文件功能
- VS2012 MFC 对话框支持文件拖拽功能
- 在MFC中实现拖拽文件到对话框中的编辑控件中
- MFC中实现选择文件夹对话框
- MFC在对话框中实现打印预览
- MFC中如何实现对话框的打印
- MFC实现文件拖拽功能
- 在VC对话框中实现打印功能
- 基于mfc的对话框编程中,实现控件随对话框大小自动缩放以及通过滚动条实现控件移动功能
- 使对话框点任意地方都能拖动
- opencv CvMat矩阵学习
- 很好用的jquery表格分页插件
- 获取web.xml中的context-param和init-param参数
- 团购网或将进入“资本冰冻期”
- 升级magento到1.5后报错Invalid method Mage_Wishlist_Model_Item::canConfigure magento 1.5
- MFC 对话框中实现任意地方拖拽功能
- screen的相关属性详解
- 关于args
- 加快程序执行速度,以我的UDTW为例
- 由国内到国外 我的个人软件推广成功之路
- 正则表达式入门经典(学习笔记八)——几个例子及解释汇总
- 提供个OpenLayers学习文档
- ssh自动登录脚本
- 获取硬盘剩余容量