以下是鼠标点击图片控件中一点得到该点在图片控件中的坐标的代码,如果有三个图片控件,怎样修改才能实现点击某点得到那点在所属图片控件中的坐标?不胜感激!

xujiayuan1992 2015-10-08 07:59:03
BOOL CzuobiaoDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class

if(pMsg->message == WM_LBUTTONDOWN && GetDlgItem(IDC_ShowImg)->GetSafeHwnd() == pMsg->hwnd )

OnLButtonDown(MK_LBUTTON, pMsg->pt); //在此传递点击部位在对话框中的坐标

return CDialog::PreTranslateMessage(pMsg);
}

void CzuobiaoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect_ctr;
(this->GetDlgItem(IDC_ShowImg))->GetWindowRect(&rect_ctr);//获取Picture控件相对屏幕左上角的坐标,
//存储到rect_ctr中

ScreenToClient(rect_ctr);//获取Picture控件相对对话框客户区左上角的坐标
point.x -= rect_ctr.left;//point获取的是鼠标相对对话框客户区左上角的坐标,减去rect_ctr.left和
point.y -= rect_ctr.top;//rect_ctr.top后,即为鼠标相对Picture控件左上角的坐标
}
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2016-03-15
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复多日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
xl3783 2015-10-19
  • 打赏
  • 举报
回复
void CDlgTmpDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CPoint ptDest = point;
	CRect rect_ctr[3];	
	ClientToScreen(&ptDest);
	(GetDlgItem(IDC_PICTURE1))->GetWindowRect(&rect_ctr[0]);
	(GetDlgItem(IDC_PICTURE2))->GetWindowRect(&rect_ctr[1]);
	(GetDlgItem(IDC_PICTURE3))->GetWindowRect(&rect_ctr[2]);
	
	if(isInRect(ptDest,rect_ctr[0]))
	{
		(GetDlgItem(IDC_PICTURE1))->ScreenToClient(&ptDest);
	}
	else if(isInRect(ptDest,rect_ctr[1]))
	{
		(GetDlgItem(IDC_PICTURE2))->ScreenToClient(&ptDest);
	}
	else if(isInRect(ptDest,rect_ctr[2]))
	{
		(GetDlgItem(IDC_PICTURE3))->ScreenToClient(&ptDest);		
	}
	//CDialogEx::OnLButtonDown(nFlags, point);
}


BOOL CDlgTmpDlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 在此添加专用代码和/或调用基类
	if(pMsg->message == WM_LBUTTONDOWN && (GetDlgItem(IDC_PICTURE1)->GetSafeHwnd() == pMsg->hwnd
		|| GetDlgItem(IDC_PICTURE2)->GetSafeHwnd() == pMsg->hwnd
		||GetDlgItem(IDC_PICTURE3)->GetSafeHwnd() == pMsg->hwnd))

		OnLButtonDown(MK_LBUTTON, pMsg->pt); 

	return CDialogEx::PreTranslateMessage(pMsg);
}

bool CDlgTmpDlg::isInRect( CPoint pt,CRect rect )
{
	bool bReturn = false;
	if(pt.x >= rect.left && pt.x <= rect.right &&pt.y >= rect.top && pt.y <= rect.bottom)
		bReturn = true;
	return bReturn;
}
不知道能不能满足要求,只适用与3个控件不重叠的情况
Eleven 2015-10-19
  • 打赏
  • 举报
回复
GetCursorPos() CStatic::ScreenToClient();
fly_dragon_fly 2015-10-09
  • 打赏
  • 举报
回复
在pretrans中直接把控件的坐标转成dlg的坐标就可以了 用mapwindowpoints

15,979

社区成员

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

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