对话框随光标移动的问题!急!

htsam 2004-04-22 09:17:41
做了一个对话框,只有一个STATIC控来实现放大镜的效果
欲使该对话框随光标移动
在mousemove里

RECT rc,dlgRc;
double width,height;//对话框的宽、高
GetWindowRect(&dlgRc);
width = dlgRc.right - dlgRc.left;
height= dlgRc.bottom - dlgRc.top;
rc.left = point.x - width/2;
rc.top = point.y - height/2;
SetWindowPos(&WNDTOP,rc.left,rc.top,width,height,SWP_NOACTIVE);

问题:
这样设置之后,对话框的中心点与光标不能重合;
若主窗口是最大化时,看上去X方向上光标与中心点好象是同一的,而Y方向大约有四十PIXEL的距离。
若主窗口非最大化时,那光标和对话框就差十万八千里了。。。555555~~~~~
MOUSEMOVE传进来的point是client coordinates吗?setWindowPos()里的RC需要的也是client coordinates吗?
怀疑自己概念混淆,用screenToClient(),ClientToScreen()去转换过rc和point,但都没有成功。用screenToClient()后,对话框移动几次后,居然跳到屏幕外面去了:(
任务到期交不了了,好惨:(
各位大侠帮帮小妹,高分答谢!

再问:为什么我不能散200分啊,所以的字又type了一遍。。。晕了!
...全文
78 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
暗黑帝国 2004-04-22
  • 打赏
  • 举报
回复
忘了告诉你,SetCapture后要ReleaseCapture
暗黑帝国 2004-04-22
  • 打赏
  • 举报
回复
SetCapture();//加这一句
CRect rect;
CPoint pt = point;

GetWindowRect(&rect);
ClientToScreen(&pt);


if (m_pt.x != point.x && m_pt.y != point.y)
{
pt.x -= rect.Width()/2;
pt.y -= rect.Height()/2;
SetWindowPos(NULL,pt.x, pt.y, rect.Width(), rect.Height(),SWP_NOACTIVATE);

}
m_pt= point;//定义一个成员变量CPoint m_pt;用来记录前一点的位置,如果移动以后的位置和前一位置有差异就移动,否则不移动,m_pt在初始化函数里初始化m_pt
holyeagle 2004-04-22
  • 打赏
  • 举报
回复
mousemove传将来的点是相对对话框的,而getwindowrect是相对屏幕的
CRect rect;
CPoint pt = point;

GetWindowRect(&rect);
ClientToScreen(&pt);

m_pt= point;

if (m_pt.x != point.x && m_pt.y != point.y)
{
pt.x -= rect.Width()/2;
pt.y -= rect.Height()/2;
SetWindowPos(NULL,pt.x, pt.y, rect.Width(), rect.Height(),SWP_NOACTIVATE);

}
badguy2002 2004-04-22
  • 打赏
  • 举报
回复
因为你在OnMouseMove中得到的鼠标座标point是相对于对话框的,而不是相对于屏幕的,所以需要用 ClientToScreen(&point);进行转换一下
另外width和height定义为LONG即可,没有必要double;
还有SetWindowPos()的第一个参数和最后一个参数你好像写错了
badguy2002 2004-04-22
  • 打赏
  • 举报
回复
换上以上代码即可,我刚才试了一下的,呵呵!!
badguy2002 2004-04-22
  • 打赏
  • 举报
回复
RECT rc,dlgRc;
long width,height;//对话框的宽、高
ClientToScreen(&point);
GetWindowRect(&dlgRc);
width = dlgRc.right - dlgRc.left;
height= dlgRc.bottom - dlgRc.top;
rc.left = point.x - width/2;
rc.top = point.y - height/2;
SetWindowPos(&wndTop,rc.left,rc.top,width,height,SWP_NOACTIVATE);
htsam 2004-04-22
  • 打赏
  • 举报
回复
谢谢阿三!
自己也UP一下!
tangxiaosan001 2004-04-22
  • 打赏
  • 举报
回复
这个我不懂,快来人呀.帮你up

15,980

社区成员

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

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