按下鼠标左键移动窗体 求高效的方式 ====================

asight 2011-08-04 04:57:34
网上多数解决方法如下:
LButtonDown标记
MouseMove根据标记和最初坐标计算最终位置 MoveWindow
这种方式对于大窗体来说可以,但对于小于100*100的窗体来说 移动跟不上鼠标 感觉卡卡的 非常容易跟丢
我以为是SetLayeredWindow可能的绘制延迟导致窗体跟丢鼠标,我新建空白mfc window试了下这种方式 依然跟丢,说明这种方式的实现是山寨的 不入流的

不知QQ聊天窗怎么实现的,大概有效区域40*80都能做到完全不卡 再快的鼠标也跟不丢 就像标题栏一样迅速移动

求高人赐教实现原理
...全文
62 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
asight 2011-08-04
  • 打赏
  • 举报
回复
谢谢 问题解决了 就是OnNcHitTest 这个最方便
如果默认函数返回 HTCLIENT 则返回HTCAPTION 否则直接返回默认函数

以上只要是LNCBUTTON HTCAPTION的做法都是可以 解决结贴
smwhotjay 2011-08-04
  • 打赏
  • 举报
回复
来晚了
wyd0021 2011-08-04
  • 打赏
  • 举报
回复
Mark
一桶姜山 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]
WM_NCHITTEST ??
[/Quote]

++
gz_qmc 2011-08-04
  • 打赏
  • 举报
回复
void CXXXX::OnLButtonDown(UINT nFlags, CPoint point)
{
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM (point.x, point. y));
CDialog::OnLButtonDown(nFlags, point);
}

红色这句是加的,其他是系统自己生成
Eleven 2011-08-04
  • 打赏
  • 举报
回复
WM_NCHITTEST ??
gz_qmc 2011-08-04
  • 打赏
  • 举报
回复
响应鼠标按下

void CXXXX::OnLButtonDown(UINT nFlags, CPoint point)
{
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM (point.x, point. y));
CDialog::OnLButtonDown(nFlags, point);
}
allenhiman 2011-08-04
  • 打赏
  • 举报
回复
void CAlphaDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
if (m_bEnableDrag)
{

::SendMessage( GetSafeHwnd(), WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
}

CDialog::OnLButtonDown(nFlags, point);
}
allenhiman 2011-08-04
  • 打赏
  • 举报
回复
咦 我遇到这种需求 都是模拟拖拽标题栏啊 就是发拖拽标题栏的消息。

15,980

社区成员

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

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