移动窗体

本文介绍了两种模拟鼠标点击窗口标题栏的技术:一种是通过处理WM_NCHITTEST消息让系统误以为鼠标位于标题栏上;另一种是通过响应WM_LBUTTONDOWN消息并向父窗口发送WM_NCLBUTTONDOWN消息来实现同样的效果。这两种方法适用于对话框和基于对话的应用程序。

 当窗口需要确定鼠标位置时Windows向窗口发送WM_NCHITTEST信息,可以处理该信息使Windows认为鼠标在窗口标题上。对于对话框和基于对话的应用程序,可以使用ClassWizard处理该信息并调用基类函数, 如果函数返回HTCLIENT 则表明鼠标在客房区域,返回HTCAPTION表明鼠标在Windows的标题栏中。
UINT CSampleDialog : : OnNcHitTest (Cpoint point )
{
 UINT nHitTest =Cdialog: : OnNcHitTest (point )
 return (nHitTest = =HTCLIENT)? HTCAPTION : nHitTest
}

 上述技术有两点不利之处,
其一是在窗口的客户区域双击时,窗口将极大;
其二, 它不适合包含几个视窗的主框窗口。
还有一种方法,当用户按下鼠标左键使主框窗口认为鼠标在其窗口标题上,使用ClassWizard在视窗中处理WM_LBUTTODOWN信息并向主框窗口发送一个WM_NCLBUTTONDOWN信息和一个单击测试HTCAPTION。
void CSampleView : : OnLButtonDown (UINT nFlags , Cpoint point)
{
 CView : : OnLButtonDow (nFlags , pont )
 //Fool frame window into thinking somene clicked on its caption bar .
 GetParentFrame()->PostMessage( WM_NCLBUTTONDOWN ,HTCAPTION , MAKELPARAM (point.x , point.y))
}
 该技术也适用于对话框和基于对的应用程序,只是不必调用CWnd: :GetParentFrame 。
void CSampleDialog : : OnLbuttonDown (UINT nFlags, Cpoint point )
{
 Cdialog : : OnLButtonDow (nFlags, goint )
 //Fool dialog into thinking simeone clicked on itscaption bar .
 PostMessage(WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARM (point.x, point. y));
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值