MFC客户区拖动窗口实现

时间:2022-05-17 20:02:48

思路:

总共分2步

1 在OnLButtonDown中记住鼠标点击的位置

2 在OnMouseMove中处理窗口移动

代码:

void CLoginDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pointLButtonDown = point;//记住点击位置
	CDialogEx::OnLButtonDown(nFlags, point);
}

void CLoginDlg::OnMouseMove(UINT nFlags, CPoint point)
{
	if (MK_LBUTTON&nFlags)//鼠标左键按下,移动窗口
	{
		//得到窗口区域
		CRect windowRect;
		GetWindowRect(&windowRect);
		//将鼠标客户区当前位置坐标转换为屏幕坐标
		ClientToScreen(&point);
		//把当前位置转换为客户区原点
		point.x -= m_pointLButtonDown.x;
		point.y -= m_pointLButtonDown.y;
		//客户区域移动到新原点
		windowRect.MoveToXY(point);
		//移动窗口
		MoveWindow(windowRect);
	}
	CDialogEx::OnMouseMove(nFlags, point);
}