MFC如何获取控件在对话框上的位置坐标

MFC如何获取控件在对话框上的位置坐标,第1张

本来希望的效果是在对话框上设置两个picture控件,分别显示两幅图像,然后将两幅图像中的相似部分利用一条直线连接起来。要实现这样的效果需要知道相似位置在这两幅图中的坐标以及这两个控件在对话框上的坐标,然后通过加减运算就可以得到图像上的相似区域在对话框的坐标,直接将这两个坐标用直线连接就可以了。

为此,如何获得控件在对话框上的坐标是关键问题。编写了如下的测试小程序,目的是将两个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;

GetDlgItem(IDC_LEFT)->GetWindowRect(&rectL);//获取控件相对于屏幕的位置

ScreenToClient(rectL);//转化为对话框上的相对位置

GetDlgItem(IDC_RIGHT)->GetWindowRect(&rectR);//获取控件相对于屏幕的位置

ScreenToClient(rectR);//转化为对话框上的相对位置

m_row=rectLbottom-rectLtop;

m_colume=rectLright-rectLleft;

UpdateData(FALSE);

CClientDC dc(this);

dcMoveTo(rectLleft,rectLtop);

dcLineTo(rectRright,rectRbottom);

dcMoveTo(rectLright,rectLtop);

dcLineTo(rectRleft,rectRbottom);

dcMoveTo(rectLleft+m_colume/2,rectLtop+m_row/2);//连接两个控件中心点

这么回事啊!这个我知道! 回答: 那就foreach下所有的控件id ,输出下id的top和id的left就ok了,很easy哒 追问: 那应该怎么写呢? 回答: foreach(Control cont in this(所在的控件id,比如窗体或面板)){ messageboxshow("控件"+congtid+" 坐标"+conttop+","+contleft);}写在按钮事件里面 追问: 我像这样写 行吗?foreach(Control cont in this(button,Form1)){ messageboxshow("控件"+congtid+" 坐标"+conttop+","+contleft);} 回答: ……汗,试试吧foreach(Control cont in thisForm1Controls)///最好是放pane里面写上pane1Controls{ messageboxshow("控件"+congtid+" 坐标"+conttop+","+contleft);} 追问: 谢谢了!虽然没哟达到我想要的效果!但是分你还是给你了! 回答: 哦,没明白你啥意思,想实现啥效果,可能是我理解能力有误或者是你表达的不大清楚,呵呵

Point p = shelltoDisplay(btngetLocation());

Systemerrprintln(px + " "+py);

把局部坐标转化成全局坐标。

你拖动shell,可以看到xy不同了。

以上就是关于MFC如何获取控件在对话框上的位置坐标全部的内容,包括:MFC如何获取控件在对话框上的位置坐标、C# 怎么通过控件的ID来获取控件坐标、SWT中如何获取控件在屏幕上的位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9603270.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存