MFC 获取picture控件的鼠标点击坐标位置的方法

本文介绍了如何在MFC的Dialog中,当用户点击picture控件时,获取鼠标的精确点击位置。通过重载CDialog的PreTranslateMessage函数,结合OnLButtonDown函数,判断点击位置是否在picture控件内,并调整坐标到控件内的相对位置。
摘要由CSDN通过智能技术生成

     在一个自定义的Dialog中加入了picture控件,想要获取鼠标在该控件上的点击位置,遇到一些困难,最终解决了。方法如下:

     其实挺简单的,首先用自定义的Dialog类重载CDialog的PreTranslateMessage函数,并在其中用到了Dialog的OnLButtonDown函数(其实不用也行,我只是想把操作封在这个函数里)这样就可以通过此函数传递点击位置。

BOOL PrintDialog::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class


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

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


return CDialog::PreTranslateMessage(pMsg);
}


接下来在Dialog中的OnLButtonDown函数中判段是否点在picture控件内(lRect是控件的区域)

if((point.x>=lRect.left && point.x<

MFC(Microsoft Foundation Classes)中,获取picture控件鼠标点击坐标位置可以通过处理控件鼠标消息来实现。具体来说,你可以通过在控件的消息映射中处理WM_LBUTTONDOWN消息来获取鼠标左键点击坐标位置。以下是一个简单的示例代码: ```cpp // 假设你有一个名为CPictureCtrl的类继承自CStatic(用于显示图片的控件) class CPictureCtrl : public CStatic { // ... 其他代码 ... // 消息映射宏 BEGIN_MESSAGE_MAP(CPictureCtrl, CStatic) // ... 其他消息映射 ... ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() // WM_LBUTTONDOWN消息处理函数 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); }; // 实现消息处理函数 void CPictureCtrl::OnLButtonDown(UINT nFlags, CPoint point) { // 在这里处理鼠标点击事件 // point参数包含了鼠标点击时相对于控件左上角的坐标 // 如果需要屏幕坐标,可以使用ClientToScreen函数 ScreenToClient(&point); // 使用获取到的坐标进行相应的处理 // ... } // ... 其他代码 ... ``` 在这个示例中,`CPictureCtrl` 类继承自 `CStatic` 类,并且通过 `BEGIN_MESSAGE_MAP` 和 `END_MESSAGE_MAP` 宏定义了消息映射。`ON_WM_LBUTTONDOWN()` 宏告诉MFC框架当控件接收到WM_LBUTTONDOWN消息时,应该调用 `OnLButtonDown` 函数。`OnLButtonDown` 函数接收两个参数,其中 `point` 包含了鼠标点击时的位置坐标。如果需要将控件内部坐标转换为屏幕坐标,可以使用 `ScreenToClient` 函数。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值