求助:如何实现按下鼠标左键拖动对话框移动的功能?

gxqcdit 2013-03-29 08:06:45

用VS2003实现功能:在一个非模态对话框客户区(对话框没有TITLE,BORDER类型为NONE)按下鼠标左键然后移动鼠标从而拖动该对话框,我用如下代码,实现的效果可以拖动该对话框,但在拖动的过程中对话框不停的闪烁和抖动,为何?


void CShowWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLBPressed = true;

m_nPrePtX = point.x;
m_nPrePtY = point.y;

CDialog::OnLButtonDown(nFlags, point);
}

void CShowWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bLBPressed = false;
CDialog::OnLButtonUp(nFlags, point);
}
void CShowWnd::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bLBPressed)
{
CRect rct;
::GetWindowRect(this->GetSafeHwnd(), &rct);
int nSpanX = point.x - m_nPrePtX;
int nSpanY = point.y - m_nPrePtY;

::SetWindowPos(this->GetSafeHwnd(), HWND_TOP, rct.left+nSpanX, rct.top+nSpanY, rct.Width(), rct.Height(), SWP_FRAMECHANGED);

m_nPrePtX = point.x;
m_nPrePtY = point.y;
}

CDialog::OnMouseMove(nFlags, point);
}

请高手们赐教啊。

...全文
172 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2013-03-29
  • 打赏
  • 举报
回复
响应WM_NCHITTEST消息返回HTCAPTION即可。
gxqcdit 2013-03-29
  • 打赏
  • 举报
回复
呵呵,我搜索了以前的帖子,解决了 void CShowWnd::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y)); CDialog::OnLButtonDown(nFlags, point); }
gxqcdit 2013-03-29
  • 打赏
  • 举报
回复
CShowWnd类就是该非模态对话框类,为什么会抖动呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧