码迷,mamicode.com
首页 > 移动开发 > 详细

如何限制窗体的移动范围

时间:2014-12-05 21:21:44      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:ar   on   log   代码   ef   amp   as   tt   程序   

作用:

可以控制MessageBox()确认窗口只能在父窗口的范围内移动,不能移出父窗口的范围。

注意:始终要保证子窗口坐标不越界以及维持窗口尺寸大小


方法:重载消息WM_MOVING

//限制窗口的移动范围(不能在WM_MOVE中实现)
void CDelTaskDlg::OnMoving(UINT fwSide, LPRECT pRect)
{
	// TODO:  在此处添加消息处理程序代码

	//获取主窗口坐标
	//方法1:
	CRect rectParent;
	GetParent()->GetWindowRect(&rectParent);
	//方法2:
	//HWND hMain = AfxGetMainWnd()->GetSafeHwnd();
	//::GetWindowRect(hMain, &rectParent);
	//方法3:
	//HWND hMain = AfxGetApp()->GetMainWnd()->GetSafeHwnd();
	//::GetWindowRect(hMain, &rectParent);


  //当前窗口坐标
	CRect rectChild;
	GetWindowRect(&rectChild);

	pRect->left = max(pRect->left, rectParent.left);
	pRect->left = min(pRect->left, rectParent.right - rectChild.Width());

	pRect->top = max(pRect->top, rectParent.top);
	pRect->top = min(pRect->top, rectParent.bottom - rectChild.Height());

	pRect->right = min(pRect->right, rectParent.right);
	pRect->right = max(pRect->right, rectParent.left + rectChild.Width());

	pRect->bottom = min(pRect->bottom, rectParent.bottom);
	pRect->bottom = max(pRect->bottom, rectParent.top + rectChild.Height());

	CDialogEx::OnMoving(fwSide, pRect);
}

或者:


//限制窗口的移动范围(不能在WM_MOVE中实现)
void CDelTaskDlg::OnMoving(UINT fwSide, LPRECT pRect)
{
	// TODO:  在此处添加消息处理程序代码

	CRect rectParent;
	GetParent()->GetWindowRect(&rectParent);

	CRect rectChild;
	GetClientRect(&rectChild);

	//pRect->left = min(pRect->left, rectParent.right - rectChild.Width());
	pRect->left = max(pRect->left, rectParent.left);
	pRect->right = pRect->left + rectChild.Width();

	//pRect->top = min(pRect->top, rectParent.bottom - rectChild.Height());
	pRect->top = max(pRect->top, rectParent.top);
	pRect->bottom = pRect->top + rectChild.Height();

	pRect->right = min(pRect->right, rectParent.right);
	pRect->left = pRect->right - rectChild.Width();

	pRect->bottom = min(pRect->bottom, rectParent.bottom);
	pRect->top = pRect->bottom - rectChild.Height();

	CDialogEx::OnMoving(fwSide, pRect);
}


如何限制窗体的移动范围

标签:ar   on   log   代码   ef   amp   as   tt   程序   

原文地址:http://blog.csdn.net/jiangqin115/article/details/41753077

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!