VC中无标题栏的对话框界面 ,如何来拖动程序的解决方法

在VC中创建无标题栏的对话框界面,要实现拖动窗口功能,可通过处理WM_NCHITTEST消息来实现。当鼠标点中窗口非客户区,窗口过程返回HTCAPTION代码,Windows进入拖拽模式。可以覆盖CDialog的OnNcHitTest方法,检查鼠标是否在客户区内,若在则返回HTCAPTION,允许拖动。
摘要由CSDN通过智能技术生成

 

一,对话框处理:

标题栏里拖动窗口的原理:

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

添加窗口的UINT CMyDialog::OnNcHitTest(CPoint pt)事件

简单的处理如下:

UINT CMyDialog::OnNcHitTest(CPoint pt)
{
 //return CDialog::OnNcHitTest(pt);
 CRect rc;
 GetClientRect(&rc);                 //获取客户区矩形大小
 ClientToScreen(&rc);             //将矩形的用户坐标转换成屏幕坐标
 return rc.PtInRect(pt) ? HTCAPTION : CDialog::OnNcHitTest(pt); //当鼠标落在客户区内,函数返回HTCAPTION
}

二、MFC中单文档处理

在鼠标点击到客户区的时候,该如何处理?思考~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值