做了一个对话框,只有一个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了一遍晕了!
欲使该对话框随光标移动
在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了一遍晕了!
解决方案 »
- CRichEditCtrl背景不能透明的问题。希望大大们都来看看
- Qt已经和Microsoft Visual Studio无缝的集成到了一起?
- vc++60中如何让已打开的文件以标签的形式浏览啊?难道必须要在菜单“窗口”中查看吗?
- 如何使用ATL编写的COM控件来播放AVI文件,需要在IE上使用的.
- CreateDialogParam 在工作线程中创建非模态对话框的问题
- 程序时生成一个文件,程序完了就把文件删除了。我以独享方式打开,不让其他程序能够访问。但如果程序运行的时候,程序被Kill了,或者掉电
- 为何ADO在程序关闭前不能完全保存!
- ###############小问题##########
- 在VC中能运行C++程序吗?
- ※※※※☆★难度问题★☆※※※※→“生人回避”!!呵呵!
- 请问那里有关于存储过程和触发器操作的资料?进者有分
- 网络端口疑问
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);
另外width和height定义为LONG即可,没有必要double;
还有SetWindowPos()的第一个参数和最后一个参数你好像写错了
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);
}
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