博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vc实现非标题栏窗口拖动
阅读量:6519 次
发布时间:2019-06-24

本文共 757 字,大约阅读时间需要 2 分钟。

当鼠标在非客户区按下的时候,MFC通过发送
WM_NCHITTEST
消息来确定位置,并依据WM_NCHITTEST消息的响应函数返回的位置信息确定应该执行的操作。在标题栏上按下鼠标将执行拖动窗口操作。
现在我们有了另一个实现拖动窗口的方法了:响应WM_NCHITTEST消息,无论鼠标在什么位置,都返回HTCAPTION(标题栏),骗过MFC,让它来实现窗口拖动。
如果IDE好使的话,可以使用增加消息响应向导简化编程。也可以按以下方法手动添加WM_NCHITTEST的响应函数。
1)
在窗口类定义中添加响应函数的声明:
afx_msg UINT OnNcHitTest(CPoint point);
2)
在消息响应入口表中登记响应入口,也就是在EGIN_MESSAGE_MAP和END_MESSAGE_MAP之间增加以下内容:
ON_WM_NCHITTEST()
3)
实现OnNcHitTest的函数体,假设类名为CXxx:
UINT CXxx::OnNcHitTest(CPoint point)
{
           // TODO: Add your message handler code here and/or call default
           CRect rc;
           GetClientRect(&rc);
           ClientToScreen(&rc);
           return rc.PtInRect(point) ? HTCAPTION : CDialog::OnNcHitTest(point);   //鼠标如果在客户区,将其当作标题栏
}
经过这三步,窗口应该可以拖动了,实在是有点太容易。
 
参考 

转载于:https://www.cnblogs.com/ventry/archive/2012/07/30/2615904.html

你可能感兴趣的文章
RxSwift源码与模式分析一:基本类
查看>>
.NET MVC5+ Dapper+扩展+微软Unity依赖注入实例
查看>>
INSTALL_FAILED_USER_RESTRICTED
查看>>
使用 https, 并将 WWW 跳转到 NON-WWW
查看>>
Java EE跟JCP说再见
查看>>
分布式团队面临的五大问题及解决办法
查看>>
GitLab 8.7发布
查看>>
【互联网专场】以云为桥,腾讯云助互联网行业加速连接人工智能
查看>>
如何将C# 7类库升级到C# 8?使用可空引用类型
查看>>
“软”苹果水逆的一周:杂志服务崩溃,新机型遭泄露,芯片首架离职
查看>>
Gerrit代码Review入门实战
查看>>
Racket 6.11提供了稳定的细化类型和依赖函数特性
查看>>
自做Windows上界面美观的PHP集成环境软件
查看>>
Javascript加载执行方法总结
查看>>
温故知新之JS基础
查看>>
关于js高级程序设计第三版中关于arguments论述的一个错误
查看>>
Linux Namespace系列(01):Namespace概述
查看>>
正则表达式小结
查看>>
使用CSS处理标题过长,自动截断,兼容响应式布局
查看>>
Hexo-Neat介绍
查看>>