怎么实现在Dialog界面任意点按住鼠标拖动就能移动对话框? ?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 响应WM_LBUTTONDONW ,WM_MOUSEMOVE 消息记下鼠标位移然后移动对话框就可以了 我提问前是这么做得,但是移动时重绘效果很差,不知道应该怎么办我这样写的oldrc和oldpoint是类成员.void popup::OnMouseMove(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 if(nFlags & MK_LBUTTON){ CRect moverc; moverc.bottom=oldrc.bottom+point.y-oldpoint.y; moverc.top=oldrc.top+point.y-oldpoint.y; moverc.left=oldrc.left+point.x-oldpoint.x; moverc.right=oldrc.right+point.x-oldpoint.x; this->MoveWindow(moverc); } //CDialog::OnMouseMove(nFlags,point);}void popup::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CRect rc; GetWindowRect(&rc); oldrc=rc; oldpoint=point; CDialog::OnMouseMove(nFlags, point); CDialog::OnLButtonDown(nFlags, point);} 简单方法,重载消息OnLButtonDown发给它消息,使系统以为是在拖放标题栏,如此,方便快捷void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y)); CDialog::OnLButtonDown(nFlags, point);} 当我们的鼠标在窗体任意位置上拖动鼠标时,让Windows以为鼠标在标题栏上拖动,不就可以实现任意点击窗体的什么地方都可以移动窗体了吗?可以在CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)中添加下面一句:PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));该语句的作用是向系统发送HTCAPTION消息,让系统以为鼠标点在标题栏上。 如何加入帮助文件? 求助一个关于VC 简单的写数据到文件指定位置的问题 实现无标题对话框移动,导致鼠标其他事件不可用! 散分,并给大家介绍一个找VC资料的好地方! 疑惑 ClistCtrl的使用问题 如何在一个多文档(MDI)的框架下从一个childFrame得到另一个childFrame,在线,急征 谁用过SetWindowText,有个奇怪的现象 ASP编程中的问题,很急…… 两本书的比较? 老婆生儿子,我也大出血!散尽200分! 将CToolBar m_toolbar 和CStatusBar m_statusbar动态的设置showwindow的问题
记下鼠标位移
然后移动对话框就可以了
oldrc和oldpoint是类成员.
void popup::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nFlags & MK_LBUTTON){
CRect moverc;
moverc.bottom=oldrc.bottom+point.y-oldpoint.y;
moverc.top=oldrc.top+point.y-oldpoint.y;
moverc.left=oldrc.left+point.x-oldpoint.x;
moverc.right=oldrc.right+point.x-oldpoint.x;
this->MoveWindow(moverc);
}
//CDialog::OnMouseMove(nFlags,point);
}void popup::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rc;
GetWindowRect(&rc);
oldrc=rc;
oldpoint=point;
CDialog::OnMouseMove(nFlags, point);
CDialog::OnLButtonDown(nFlags, point);
}
发给它消息,使系统以为是在拖放标题栏,如此,方便快捷void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));
CDialog::OnLButtonDown(nFlags, point);
}