MFC中, 如何实现拖动窗口的一个地方(不是标题栏), 然后把窗口拖走?
我在窗口的鼠标按下消息中加入了m_point=point;SetTimer(100,1,NULL);然后在鼠标松开中加入了m_point=point;KillTimer(...
我在窗口的鼠标按下消息中加入了
m_point = point;
SetTimer(100, 1, NULL);
然后在鼠标松开中加入了
m_point = point;
KillTimer(100);
CDialog::OnLButtonUp(nFlags, point);
最后在定时器响应消息里加入了:
if (nIDEvent == 100)
{
CPoint point;
GetCursorPos(&point);
CRect rect, rect2;
GetDesktopWindow()->GetWindowRect(&rect);
GetWindowRect(&rect2);
if (rect2.right >= rect.Width()-10)
MessageBox("DDDD");
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(m_point.x, m_point.y));
Sleep(100);
SendMessage(WM_NCLBUTTONUP, HTCAPTION, MAKELPARAM(point.x, point.y));
m_point = point;
}
只能够在鼠标松开的时候移动窗口, 我要的是时刻跟随鼠标. 展开
m_point = point;
SetTimer(100, 1, NULL);
然后在鼠标松开中加入了
m_point = point;
KillTimer(100);
CDialog::OnLButtonUp(nFlags, point);
最后在定时器响应消息里加入了:
if (nIDEvent == 100)
{
CPoint point;
GetCursorPos(&point);
CRect rect, rect2;
GetDesktopWindow()->GetWindowRect(&rect);
GetWindowRect(&rect2);
if (rect2.right >= rect.Width()-10)
MessageBox("DDDD");
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(m_point.x, m_point.y));
Sleep(100);
SendMessage(WM_NCLBUTTONUP, HTCAPTION, MAKELPARAM(point.x, point.y));
m_point = point;
}
只能够在鼠标松开的时候移动窗口, 我要的是时刻跟随鼠标. 展开
展开全部
在PreTranslateMsg函数中,将鼠标左键移动或者点击消息,模拟成点击在标题栏上就可以了
追问
怎么具体实现?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接在网上搜你的提问,有很多资料甚至源码。
追问
废话啊.
网上的只能是在鼠标松开的地方移动窗口, 和我的代码一样.
我要的是能够每鼠标移动的时候, 窗口就移动.
追答
看来你没有仔细看网上资料,在非标题栏处使用鼠标左键点击移动窗口,可以在OnNcHitTest消息函数里面进行处理,只要在此函数里面判断鼠标点击点在你指定的范围内,则只需让OnNcHitTest消息函数返回 HTCAPTION,以下下是一个例子:
LRESULT CQPlayerDlg::OnNcHitTest(CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CPoint pt;
pt = point;
ScreenToClient(&pt);
CRect screenRect;
GetDlgItem(IDC_SCREEN)->GetWindowRect(&screenRect);
if (pt.y < 35)
{
return HTCAPTION;
}
return CDialogEx::OnNcHitTest(point);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询