RSS
热门关键字:  计算机有关资料  33252  mkv  word  MKV_NT
当前位置 : 主页>vc编程>界面/窗口>列表

如何单击除了窗口标题栏以外的区域使窗口移动

来源:csdn.net 作者: 时间:2006-12-06 点击:
  当窗口需要确定鼠标位置时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)
{
 CSampleView::OnLButtonDown(nFlags, point);
 //Fool frame window into thinking somene clicked on its caption bar .
 GetParentFrame( )->PostMessage (WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM (poitn .x , point .y) );
}

  该技术也适用于对话框和基于对话框的应用程序,只是不必调用CWnd: :GetParentFrame 。

void CSampleDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 CDialog::OnLButtonDown(nFlags, point);
 PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
}

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册