
要实现这样的效果需要知道相似位置在这两幅图中的坐标以及这两个控件在对话框上的坐标,然后通过加减运算就可以得到图像上的相似区域在对话框的坐标,直接将这两个坐标用直线连接就可以了。
为此,如何获得控件在对话框上的坐标是关键问题。编写了如下的测试小程序,目的是将两个picture控件中的点用直线连接起来,比较直观的是picture控件的四个角,所以程序中是将控件的拐角连接起来。首先在对话框上并排放置两个同样大小的picture控件,将他们的标识分别设成IDC_LEFT和IDC_RIGHT,然后添加两个编辑框用于显示picture控件的大小,给这两个编辑框添加相应的数据成员m_row和m_colume。添加一个按钮用于连接picture控件中的点,为这个按钮添加
成员函数
OnMatch()
。
void
CControlDlg::OnMatch(){//
TODO:
Add
your
control
notification
handler
code
here
CRect
rectL,rectR;
有现成的ScreenToClient函数,你可以百度搜一下。
例:
void CTest25Dlg::OnButton1()
{
CRect r(0,0,100,100);
CPoint pt(0,0);
ScreenToClient(&r);
ScreenToClient(&pt);
}
执行下面的两行后,r,pt的值变成了相对对话框左上角的值
cpoint
酣窢丰喝莶估奉台斧郡pt;
::getcursorpos(&pt);
这样就可以得到当前鼠标的位置了,(ptx,pty)。
要获得鼠标点击时的坐标不用自己获得的,mfc的消息映射函数的参数中有鼠标位置的这个参数的。
窗口上相应WM_MOUSEMOVE消息
编写消息相应函数就行了,“鼠标移动坐标的返回”啥意思?
OnMouseMove函数的参数CPoint pt就是鼠标在当前窗口客户区的坐标了。
还可以使用 GetCursorPos(&ptScreen);ScreenToClient(&ptScreen);
来获取鼠标光标的坐标。
文字显示 TextOut();
楼上的回答
不够
确切
对于一个对话框来说
,可以
处理WM_MOUSEMOVE消息
然后在
OnMouseMove(UINT
nFlags,
CPoint
point)
的第二个参数
point
就是鼠标的坐标
但是
这个并不是很好用,因为这个point
得到的坐标值的原点(00)是相对
这个对话框的,而不是
整个
屏幕的。要想得到整个屏幕的鼠标坐标,
建议在这个OnMouseMove过程中
添加
POINT
point2;
GetCursorPos(&point2);//得到鼠标的位置,相对屏幕的
来得到鼠标的坐标。
还有个问题是,如果你的
的
窗口(对话框)是当前窗口(活动的,最上的,有输入焦点的),当
鼠标指针
移动到
这个
对话框
以外
时候
,这个对话框就无法获取鼠标
消息了。
解决方法
在适当的位置(如
窗口初始化,按下左键
等等)
调用
这个函数
SetCapture(),这样无论鼠标
在不在
对话框
内
都会
捕获
鼠标
消息,但是一定要记得,不想捕获的时候(窗口摧毁,鼠标左键抬起
等等)使用ReleaseCapture()来释放捕获。
以上就是关于MFC如何获取控件在对话框上的位置坐标全部的内容,包括:MFC如何获取控件在对话框上的位置坐标、MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。、如何获取鼠标点击的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)